免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: duanjigang
打印 上一主题 下一主题

谈谈你接触的通讯程序的模型 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2011-01-13 09:04 |只看该作者
接着6楼的问题。
  既然只读取的操作不能发现连接的断开,为什么不增加一个发送操作?是的,这个想法很好, ...
duanjigang 发表于 2011-01-02 11:56



    这个说白了就是一个心跳检测?如果用TCP,个人比较倾向于用TCP本身的心跳,这样,服务器和客户端可以分别自己选择是否处理心跳,交给传输协议自己处理吧……

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
62 [报告]
发表于 2011-01-13 10:46 |只看该作者
这个说白了就是一个心跳检测?如果用TCP,个人比较倾向于用TCP本身的心跳,这样,服务器和客户端 ...
还魂僵尸 发表于 2011-01-13 09:04



    这个心跳太弱了,拔网线之类的没法检测。

论坛徽章:
0
63 [报告]
发表于 2011-01-13 11:29 |只看该作者
还有人对ICE这个中间件使用过的没?说说使用感受和自己的做法。
这个话题已经收集了不少意见和看法,过几天筹划下,发起一个通讯类中间件实践的项目,欢迎大家踊跃参与喔
也可以就这个中间件的功能和自己的设计方法发表意见。

论坛徽章:
0
64 [报告]
发表于 2011-01-14 09:20 |只看该作者
回复  duanjigang


  是的,没错。

通讯层就是类似于数据中间件,负责client与业务处理层面的数据接 ...
jiang1013nan 发表于 2011-01-11 15:21



    为什么UDP就不太可行呢,我觉得UDP一样,同样通讯层跟业务层分开,对于大数据,可以接收后组包

论坛徽章:
0
65 [报告]
发表于 2011-01-14 10:08 |只看该作者
为什么UDP就不太可行呢,我觉得UDP一样,同样通讯层跟业务层分开,对于大数据,可以接收后组包
wheniwasyoung 发表于 2011-01-14 09:20



    恩,可以的,UDP自己再分包?组包?么非又要用UDP实现一个可靠的流式传输?:wink:

论坛徽章:
0
66 [报告]
发表于 2011-01-14 11:04 |只看该作者
UDP传输进行分包的方式 有两种情况是必须要考虑的 一种就是接收的包顺序错乱,这种情况还是比较好处理的 第二种情况就是包丢失 这个情况处理起来比较复杂

论坛徽章:
0
67 [报告]
发表于 2011-01-14 16:58 |只看该作者
UDP传输进行分包的方式 有两种情况是必须要考虑的 一种就是接收的包顺序错乱,这种情况还是比较好处理的 第 ...
wucailiuxing 发表于 2011-01-14 11:04



   要实现重发机制

论坛徽章:
0
68 [报告]
发表于 2011-01-15 01:27 |只看该作者
mark,坐看高手论道

论坛徽章:
0
69 [报告]
发表于 2011-01-15 14:16 |只看该作者
第二种双线程的方式已经是一种不错的模型了,在实际中应用也不少,上面量段文字和图片说明了服务端和客户端 ...
duanjigang 发表于 2011-01-02 11:39

man recv
If  no messages are available at the socket, the receive calls wait for
       a message to arrive, unless the socket is nonblocking  (see  fcntl(2)),
       in  which case the value -1 is returned and the external variable errno
       is set to EAGAIN or EWOULDBLOCK.  The receive calls normally return any
       data  available,  up  to  the requested amount, rather than waiting for
       receipt of the full amount requested.


RETURN VALUE
       These calls return the number of bytes received,  or  -1  if  an  error
       occurred.   The  return  value will be 0 when the peer has performed an
       orderly shutdown.


ERRORS
       These are some standard errors generated by the  socket  layer.   Addi鈥
       tional  errors may be generated and returned from the underlying proto鈥
       col modules; see their manual pages.

       EAGAIN or EWOULDBLOCK
              The socket is marked nonblocking and the receive operation would
              block, or a receive timeout had been set and the timeout expired
              before data was received.  POSIX.1-2001 allows either  error  to
              be  returned for this case, and does not require these constants
              to have the same value, so a portable application  should  check
              for both possibilities.

论坛徽章:
0
70 [报告]
发表于 2011-01-23 02:36 |只看该作者
我不赞成楼上各位所说的用进程取代线程以防止异常终止的情况,可能是我代码写的少,不明白为什么会发生异常终止。且不说这个,个人觉得好的架构应该是平台无关的,在Windows平台,如何实现fork?CreateProcess?另外,个人喜欢LF线程池模型,简单,稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP