BSc*_*ker 5 c++ sockets network-programming tcp pthreads
我需要编写一个服务器来接受来自多个客户端计算机的连接,维护已连接客户端的跟踪并根据需要发送单个客户端数据.有时,可以使用相同的消息立即联系所有客户端,有时可以是一个客户端或一组客户端.
由于我需要确认客户端收到信息并且不想为UDP连接构建ACK结构,因此我决定使用TCP流方法.但是,我一直在努力了解如何维护多个连接并使它们保持空闲状态.
我似乎有三个选择.对每个传入连接使用fork来创建单独的子进程,使用pthread_create为每个进程创建一个完整的新线程,或使用select()在所有打开的套接字ID上等待连接.
关于如何攻击这个的建议?我已经开始使用pthreads,但由于性能可能不是问题,因此多核处理不是必需的,也许有一种更简单的方法.
子进程并不好,因为你只是移动球门柱.您需要让您的子进程在彼此之间进行通信,然后您回到同样的问题.
可以使用线程,但如果线程在套接字接收上保持阻塞,则会遇到其他问题.
select()(或更新的(POSIX)Unix上的poll())仍然是最好的解决方案.你告诉select()或poll()你要监视哪些套接字或描述符的事件(可能只是输入(读取)事件就足够了),然后你对那个被select标记的套接字或描述符做只读()/轮询().保证recv()不会阻塞.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |