当前位置:  技术问答>linux和unix

我要做一个网络通信的程序,会涉及到从几个连接接收数据,然后整合

    来源: 互联网  发布时间:2016-01-17

    本文导语:  就象是一个tcp服务器,从几个不同的连接接收数据,我看了些样例,linux中都是要将连接fork成子进程,那么子连接接收的数据必定是在子进程当中,这样几个子进程再将数据进行组合(比如统一由父进程来处理),应该...

就象是一个tcp服务器,从几个不同的连接接收数据,我看了些样例,linux中都是要将连接fork成子进程,那么子连接接收的数据必定是在子进程当中,这样几个子进程再将数据进行组合(比如统一由父进程来处理),应该是要使用共享内存来做。

不知道有没兄弟知道这个的比较成熟的做法,我的思路是否正确?

|
同意楼上,用什么方法实现还是要根据你的实际情况,如果客户端少,连接时间长的话推荐使用fork,安全稳定.CLIENT数目有最大数值的(不是越多越好的),连接时间比较长的这一类服务,用多THREAD几乎没有什么意义。 THREAD的优势是创建开始运行比进程快些(pthread_create比fork), 一旦运行起来,进程的切换和thread的切换差别没有什么。调度也都按进程做的。
THREAD因为共享了内存使得物理内存节省。然而进程本身也有共享的物理页(比如共享库部分)。
还有一开始用多THREAD在那里等着(池)。对于连接数量小并且固定的服务意义不大。正是因为共享内存,使得多THREAD程序的调试麻烦,运行稳定性不如进程。所以我建议,能不用THREAD尽量不用。如果必须用,也可以先不用--用进程,等都调试好了后在改THREAD。也不晚。

|
正确,我这里处理消息量每天都在几千万,就是这种方式.子进程的优势在于可以一直保持服务端的端口稳定,不会因为进程处理消息意外core掉而影响其他客户端的服务

|
并发量不是很大的话,或者对处理时间要求不严的情况下 单进程select或者poll就可以了,不用太复杂
并发量大的情况下肯定要用到多进程,进程间传递数据的方式有很多, 不一定要用共享内存,个人觉得消息队列比较好用,不用自己做互斥,呵呵

|
如果是这种情况,我倒是建议楼主将接收和整合部分分开成两个独立的程序模块,两个程序模块间可以使用各种IPC进行通讯(比如消息队列,也可以使用第三方的中间件交互),接收的只接收,整合的只整合,这样会更便于以后扩展,也更符合unix下的设计思想。

|
不妨使用多线程,这样就没有进程间通信的麻烦了。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 进程间通信:pthread_cond使用在线程间,我要进程间条件同步(没有情缘关系的进程),采用什么方呢?也就是说我要在UNIX实现WIN32上命名Event的功能
  • 我要懂什么才行呀?
  • DHCPD服务开启不了,系统提示:我要声明某个网卡(因为我有两块网卡),不知道怎么搞
  • 我要学Java了,可是不知怎末学
  • 怎么跟我要activation key??
  • 如果我要用openFileDialog我应该import哪些?
  • 请问我要加载内核模块 ipip.o 怎么做
  • 我要在 linux下 使用 OCI driver , 该如何配置?
  • 怎么写linux和windows2000的架构区别!我要作业!谢谢
  • 我要生成java 的文档在dos 下用什么命令.
  • [怪象论坛]为什么总有那么多“我要……”?
  • 我要能访问以汉字命名的网页吗?
  • 我要处理用户输入的一个字符窜。怎样写用户输入这段代码?
  • 请问:再局域网中怎样用代理服务器,我要用GOOGLE!!
  • 我要为读写一个数据表做一个进度条如何做
  • 我要学UNIX了,请问该从哪里开始?
  • 我要tcpdump的安装包, 大家帮我找找, 哪里可以下载????急
  • 我要實現訪問NTFS?
  • 我要在aix下debug跟踪程序C++,需要安装什么东西?
  • 请问一下,在Solaris中我要如何安装MySql


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3