BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #1365同步于 2019/2/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

【问题】如何实现tcp中客户端服务器对等通信

ZzZ2251
2019/2/20镜像同步11 回复
求教各位, 项目需求如下: 服务器监听客户端,响应客户端对于data的请求,返回响应data存储的位置信息 同时 客户端监听服务器,接收服务器定时发送过来的data。 主要矛盾在于如何实现客户端/服务器都可以实现监听功能的同时还能发送请求? 多谢各位~~~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jh1机器人#1 · 2019/2/20
服务器,两个线程,一个服务器线程,用于监听客户端;一个客户端线程,用于定期发送数据。客户端同理
ZzZ2251机器人#2 · 2019/2/21
多谢建议~ 所以这里的两个线程相当于使用了不同的conn(也就是IP:Port)对吧? SIP:Port1 & CIP:Port1 + SIP:Port2 & CIP:Port2 【 在 jh1 的大作中提到: 】 : 服务器,两个线程,一个服务器线程,用于监听客户端;一个客户端线程,用于定期发送数据。客户端同理
qyz0123321机器人#3 · 2019/2/21
一个fd也可以对等读写,开两个线程读写就行了把。。
cc19931002机器人#4 · 2019/2/21
客户端连上服务器端之后,业务周期内,两边都不要主动断开这个连接,那不管你是要怎样发送数据都可以。不管是服务器往客户端还是客户端往服务器。
ml3615556机器人#5 · 2019/2/21
4层TCP本来就是全双工的,使用socket封装方法就好了 7层协议可以使用websocket等
ZzZ2251机器人#6 · 2019/2/22
嗯。。。 这个我还没有试过,多谢~ 我去研究一下哈哈 【 在 qyz0123321 的大作中提到: 】 : 一个fd也可以对等读写,开两个线程读写就行了把。。
ZzZ2251机器人#7 · 2019/2/22
多谢~ 可是这里是不是在使用同一个conn呢? 我的通信过程大概是:客户端<-->服务器双向通信 * 2 如果这样的话我如何保证这两对不同的通信消息在conn中能正确被接收 或者 不会产生阻塞呢(比如客户端写同时服务器写) 【 在 cc19931002 的大作中提到: 】 : 客户端连上服务器端之后,业务周期内,两边都不要主动断开这个连接,那不管你是要怎样发送数据都可以。不管是服务器往客户端还是客户端往服务器。
ZzZ2251机器人#8 · 2019/2/22
多谢~ 这里应该只需要4层协议,可能是我的socket方法没有设计妥当吧。。。 【 在 ml3615556 的大作中提到: 】 : 4层TCP本来就是全双工的,使用socket封装方法就好了 : 7层协议可以使用websocket等
cc19931002机器人#9 · 2019/2/22
我猜你的意思是如何在客户端区分服务端发送回来的两种消息,一种是客户端请求回复的、一种的服务器端主动推送的。这个东西其实就是需要你在应用层做一次定义,什么标示消息的开始,什么标示消息的结束,消息是基于文本的还是二进制的,基于文本的典型就是http,基于二进制的典型的就是mqtt。其实很复杂的要搞一个比较完备的应用层协议。所以一般用现成的比较好,比如说mqtt协议就支持建立连接后不断开,双方全双工发送数据。 【 在 ZzZ2251 的大作中提到: 】 : 多谢~ 可是这里是不是在使用同一个conn呢? 我的通信过程大概是:客户端<-->服务器双向通信 * 2 : 如果这样的话我如何保证这两对不同的通信消息在conn中能正确被接收 或者 不会产生阻塞呢(比如客户端写同时服务器写)