我计划在 Linux 上用 C 语言实现一个特殊用途的 TCP 服务器。经过一番研究后,看起来有几种方法可以做到这一点,包括单线程、每个连接一个线程等等。对于套接字,有数据报与流、阻塞与非阻塞等选项。
大多数通信看起来像:
Client: request id [request info]
Server: status id [response info]
或
Client: request id [request info]
Server: status id [response info]
Client: additional request id [request info]
Server: status id [response info]
所有内容都 <1kB,大多数内容都 <512B。然而,短时间内可能会有许多单独的请求。
那么,如何设置服务器才能最有效地工作(即不占用资源,不拒绝客户端请求)?
最佳答案
我认为你的问题归结为性能。是吗?
如果是这样,三个问题:
- 您的服务器将处理的平均/最大客户端数量是多少?
- 连接是否持久,或者客户端是否针对每个 X 请求进行连接?
- 客户端发送新请求时涉及多少处理?
无论如何,我会从简单的开始。使其成为非阻塞且单线程的。对它进行分析和压力测试。然后,如果您对所呈现的性能不满意,请找出根本原因并尝试修复它。作为最终选择,将其扩展到每个处理器核心一个工作线程。
如果您不关心可靠性和交付顺序,您可能需要使用 UDP。
关于c - 适合中等简单 TCP 服务器的良好架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009927/