我有一个服务器程序(适用于所有三个主要的操作系统),用c ++创建,它努力连接两个陌生人进行通信。我目前的模型似乎已经贬值了,我只是想知道是否有更好的方式为客户提供服务。
-server接收连接请求
- 禁止的检查
-starts此套接字的线程
[线程简单地循环执行这些步骤]
- 与合作伙伴确认连接(检查经理)
- 来自经理类的未连接请求伙伴
- 在我的套接字上接收< - 客户端每隔2s左右发送保持活动的数据包
-on断开通知管理器,并关闭线程。
[经理类的工作原理]
-add socket:push_back在我的sockPairs向量上
-request partner:找到未连接的sockPair,如果不存在则创建新的sockPair,一旦连接,标记sockPair进行删除,如果已经标记,则删除它。
-remove socket:将标志添加到我已断开连接的伙伴的经理ID中
-check socket:检查管理员ID是否断开连接
我认为地图会更有效率,但我并不积极,因为我从未与他们合作过,你认为我还应该改变什么呢?我希望能够为这个模型的200个客户提供服务,我真的不确定当前的模型是否可以处理它......
答案 0 :(得分:2)
每个连接的线程只是不缩放。您需要使用诸如select(),poll(),epoll(),WSAAsyncSelect()或其他任何可以查询事件套接字的机制。然后按顺序处理每个套接字,然后重复。