Chinaunix

标题: 服务器与客户端之间的通信,一般是不是都有2个链接? [打印本页]

作者: fender0107401    时间: 2015-02-10 14:54
标题: 服务器与客户端之间的通信,一般是不是都有2个链接?
本帖最后由 fender0107401 于 2015-02-10 14:55 编辑

比如我用Boost的ASIO,是不是应该建立两个链接。一个用来传递“命令”,另外一个用来传递“数据”。

给客户端传递数据的时候,都打开一个新的thread来处理。
作者: folklore    时间: 2015-02-10 14:56
什么啊, 还是一个好。 同步比较好。 异步要加额外的控制不然命令就乱了.
作者: VIP_fuck    时间: 2015-02-10 15:00
异步是挺乱的


作者: hanxin83    时间: 2015-02-10 15:03
一般小数据和指令(比如QQ的聊天消息 , 拉取好友列表)就是在同一条链路上的啦.
如果涉及到图片上传, 大文件下载之类的, 动态新增连接处理之.

业内基本是这样干.
作者: fender0107401    时间: 2015-02-10 15:06
回复 2# folklore

如果是同步的话,那么遇到下面的情况怎么办呢?

比如 Server 给 Client 发一个比较长的数据,然后 Client 又突然不想要了,然后 Client 想让立刻 Server 发送另外的数据。

这个时候,上一个命令请求的数据还没有发送完,如果只是一个链接的话,那么Client智能等Server的数据发送完成了才能再发送新命令。
作者: fender0107401    时间: 2015-02-10 15:08
探讨探讨,我没玩过这个。

欢迎有经验的站友来指点。
作者: fender0107401    时间: 2015-02-10 15:08
回复 4# hanxin83

多谢分享。


   
作者: fender0107401    时间: 2015-02-10 15:18
异步的话,估计得加锁来保证每次只发送一个命令。
作者: zhaohongjian000    时间: 2015-02-10 15:43
tcp是全双工的,接收数据的时候仍然可以发送数据。
作者: cookis    时间: 2015-02-11 08:44
第一,常说的废话,这要看你的具体需求
第二,你可以参考FTP协议实现,跟你举得例子一样,有专门的信令控制通道+数据传输通道
第三,一般确实都是用一个连接,比如 HTTP trunked的传输模式
作者: hellioncu    时间: 2015-02-11 13:05
这个看应用场景,一般一个的更常见
作者: fender0107401    时间: 2015-02-11 13:15
在我印象中,似乎只有FTP是两个。
作者: dive_    时间: 2015-02-12 10:29
从来没有想过要2个链接的事情。对于大的数据传递一般也要分成多个block来传递吧。在每个block的间隙,随时可以传递指令啊。
作者: zhujiang73    时间: 2015-02-12 16:41
fender0107401 发表于 2015-02-10 14:54
比如我用Boost的ASIO,是不是应该建立两个链接。一个用来传递“命令”,另外一个用来传递“数据”。

给客 ...



       我喜欢用 RPC ,单链接。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2