2012-01-25 83 views
2

我上实现用C Linux上的特殊目的TCP服务器计划。在做了一点研究后,看起来有几种方法可以做到这一点,包括单线程,每个连接一个线程和其他方法。对于套接字,有数据报vs流等选项,阻塞与非阻塞。良好的架构适度简单的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。但是,在短时间内可能会有很多个人请求。

那么,我该如何设置服务器,所以其工作效率最高(即不生猪资源,不否认的客户端请求)?

+1

生成响应需要很长时间吗? – cnicutar

+2

TCP意味着您正在使用流。数据报是UDP。 – duskwuff

+0

你有没有关于带宽,连接数量的想法?如果服务器没有被加载,为什么不考虑使用现有的协议(可能是HTTP,XMLRPC或SNMP等)?我会建议使用文本消息(Json,....),因为它们更易于调试。 (查看SCGI的简单协议示例)。 –

回答

3

我认为你的问题归结到性能。可以?

如果是这样,三个问题:

  • 什么是你的服务器将处理客户的平均/最大数量?
  • 连接是持久的还是客户端连接每个X请求?
  • 客户端发送新请求时涉及多少处理?

不管怎样,我会从简单的开始。使其非阻塞,并单线程。简介和压力测试它。然后,如果您对所呈现的表现不满意,请找出根本原因并尝试修复它。作为最终选项,将其扩展到每个处理器内核的一个工作线程。

如果你不关心交货的可靠性和顺序,你可能需要使用UDP。

+0

好吧,听起来像一个很好的起点。 – Dan