网络连接问题

eeeeelin 2018-03-02 11:10:42
如图所示:


最近小弟遇到一个问题,A服务端和B服务端对方要求双方保持异步长连接,B服务端跟客户端(A,B,C....N)连接是短连接,打个比方,A,B,C三个客户端同时连接向B服务器发起请求,然后B服务器处理完逻辑后向A服务器发起请求,A服务器处理完逻辑返回数据给B服务器,我想问B服务器收到里A服务器发送回来的数据,由于是异步长连接,没有谁先连接B服务端就先返回数据,那要怎么样判断数据是给A客户端,还是B客户端?

我想到的是思路是定义一个类,保存客户端连接的socket文件描述符、发送报文和接收报文都有的一个字段作为唯一标识,发送报文缓存,接收报文缓存,当A服务端返回报文了,解析报文,查找唯一标识,然后根据唯一标志找到所在的socket文件描述符,然后B服务器返回报文给客户端(具体代码还在实现当中,不知道行不行)

想问下大神们有没有好的思路或者框架,用的是C/C++开发。

...全文
431 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eeeeelin 2018-03-17
  • 打赏
  • 举报
回复
引用 2 楼 zilaishuichina 的回复:
客户端x,连上服务器B 的时候, 要向服务器B表明自己的一个唯一的身份(或者服务器B自己给这个socket标记一个唯一的身份,不一定非得在客户端上发的报文中带这个信息) 服务器B记录一个map<唯一身份, socket> 服务器B把数据传给服务器A的时候,数据包里面必须带上这个唯一身份信息,就是说要告诉服务器A,这个包是谁的,服务器A处理完返回给服务器B处理结果的时候,这个唯一身份要原样带回。 服务器B收到处理结果,根据这个唯一身份去查 map<唯一身份, socket>,得到socket,发送处理结果
定义了一个系统跟踪号作为唯一身份了,系统跟踪号用数据库序列号生成的,谢谢大神
zilaishuichina 2018-03-03
  • 打赏
  • 举报
回复
客户端x,连上服务器B 的时候, 要向服务器B表明自己的一个唯一的身份(或者服务器B自己给这个socket标记一个唯一的身份,不一定非得在客户端上发的报文中带这个信息) 服务器B记录一个map<唯一身份, socket> 服务器B把数据传给服务器A的时候,数据包里面必须带上这个唯一身份信息,就是说要告诉服务器A,这个包是谁的,服务器A处理完返回给服务器B处理结果的时候,这个唯一身份要原样带回。 服务器B收到处理结果,根据这个唯一身份去查 map<唯一身份, socket>,得到socket,发送处理结果
gzgyyx 2018-03-03
  • 打赏
  • 举报
回复
试试IOCP模型能不能解决你的问题。
我爱下午茶 2018-03-03
  • 打赏
  • 举报
回复
直接用连接的socket描述符,作为唯一项即可,不用单独发送标志位。方法可行。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧