c++ - 配对 socket

标签 c++ linux sockets vector

我有一个服务器程序(适用于所有三个主要操作系统),它是用 C++ 创建的,它努力连接两个陌生人进行通信。我当前的模型似乎已经过时了,我只是想知道是否有更好的方法来为客户提供服务。

-服务器收到连接请求
-检查禁令
- 为这个套接字启动线程


[线程简单地循环执行这些步骤]

-确认与合作伙伴的连接(检查经理)
-如果来自管理类的未连接请求伙伴
- 在我的套接字上接收 <- 客户端每 2 秒左右发送一次保持事件数据包
-on 断开连接通知管理器,并关闭线程。


[经理类是这样工作的]

-在我的 sockPairs vector 上添加 socket: push_back
- 请求伙伴:寻找未连接的sockPair,如果不存在则创建新的sockPair,一旦连接,标记sockPair以移除,如果已经标记,则移除它。
- 删除套接字:将标志添加到我已断开连接的合作伙伴的经理 ID
-检查套接字:检查断开连接的管理器ID


我认为 map 会更有效率,但我并不乐观,因为我从未与他们合作过,您认为我还应该改变什么?我希望能够使用此模型为 200 个客户提供服务,我真的不确定当前模型是否可以处理...

最佳答案

每个连接一个线程不会缩放。您需要使用一种机制,例如 select()、poll()、epoll()、WSAAsyncSelect() 或任何其他可以让您查询一组套接字的事件的机制。然后按顺序处理每个套接字,然后重复。

关于c++ - 配对 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221845/

相关文章:

linux - 如何显示以特定字母开头和结尾的文件名?

c++ - 在 C++ 中通过套接字传输数据

sockets - 了解套接字基础知识

c++ - cmake 包括来自其他目录的 h 文件

c++ - 当形成连接需要紧密耦合时,如何构建 C++/QT5 应用程序以最大限度地分离与信号/插槽的关注点?

linux - 实际 svga 控制台颜色上的 ncursesw 不正确

通过 ssh 调用 write()

c# - Python 到 C# TCP 传输损坏超过 1523 个字节的数据

c++ - Visual Studio 2008,错误 c2039 : 'set_new_handler' : is not a member of 'std'

c++ - Int Array[ ] 打印不好。