c - 适合中等简单 TCP 服务器的良好架构

标签 c linux tcp

我计划在 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/

相关文章:

c++ - C语言的Sql注入(inject)攻击

c - gcc 预处理器输出中以哈希符号和数字(如 '# 1 "a.c"')开头的行的含义是什么?

ruby - iruby 内核无法安装 rbczmq

c - 如何在单个CPU的多个CPU核心而不是多个CPU上设置亲和性?

linux - cURL 始终使用 NTLM 返回 401

c++ - 提升 ASIO : How can a server know if a client is still connected?

C 将 udp dns 消息更改为 tcp 并返回

c - 从不兼容的指针类型传递参数 1( 'strcmp')

python - 使用 Scapy 用 Python 编写的 TCP 端口扫描器没有响应

c - 双指针指针