多线程socket编程的2B设计

最近做一个local socket(domain socket)服务器,来进行进程间通信,使用线程池管理多个线程与不同的客户端连接...

在设计QUERY_CAPABILITY(能力查询)的时候,犯了一个2B的错误...

现在假设我有两个客户端C1, C2, 服务器S分别启动两个线程T1, T2来处理与他们的通信

此时C1发送命令QUERY_CAPABILITY到T1, T1做的决策是调用线程池实例的方法QueryThreadByCapability, 而在这个方法中会遍历线程对象的std::list, 然后通过list中的子线程对象调用其方法AskForCapability来判断其是否支持此能力, 而AskForCapability方法的实现是通过发送QUERY_CAPABILITY到对应的Client,再收取其反馈...

发现问题了吗?...

还没有?

再给点提示...我的子线程T(n)的线程函数是不停地select+recv...

这个时候...如果我是通过T1调用到T2的AskForCapability方法...那么从C2的反馈,会首先被T2的线程函数截获...这样T1就永远不会有返回值...

OMG...


这完全是一个设计上的2B失误...


现在我准备这么改,在Client连接到Server的时候,就把它的capability发送给Server,在对应的T(n)中保存, 这样比较合理了吧...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值