在tcp服务器中处理客户端缓冲区

因为我阅读了很多关于套接字编程的文本和代码,所以我决定这样做:

TCP服务器:

>套接字复用
>异步I / O.

我希望能够同时处理800-1200个客户端连接.我如何处理客户端缓冲区?我阅读的每个例子都只使用一个缓冲区.为什么人们不会使用以下内容:

typedef struct my_socket_tag {
    socket sock;
    char* buffer;
} client_data;

现在我能够将缓冲区从接收器线程提供给调度请求线程,并且在处理第一个客户端特定缓冲区时,接收可以在另一个套接字上继续.

这是常见做法吗?我错过了这一点吗?

请给出一些提示,下次如何改进我的问题,谢谢!

最佳答案 这些例子通常过于简单.可伸缩性是一个严重的问题,我建议从更简单的应用程序开始会更好;处理一千个客户端连接是可能的,但在大多数应用程序中,它需要非常仔细的开发.套接字编程可能会变得棘手.

有不同种类的服务器应用程序;没有一种方法可以完美地适应所有任务.有许多细节需要考虑(它是一个流或面向数据报的服务吗?是连接,如果有的话,是持久的吗?它涉及大量的小数据传输,或者很少的大量传输,还是大量的大量传输?等等,等等等等).这就是为什么你不太可能在书中看到任何常见的例子.

如果选择线程方法,请注意不要创建太多线程;每个客户端一个线程通常(但不总是)是一个糟糕的选择.在某些情况下,您甚至可以在单个线程中处理所有内容(使用异步IO)而不会牺牲任何性能.

话虽如此,我建议学习C和提升asio(或类似的框架).它解决了许多与可扩展性相关的问题,因此重新发明轮子毫无意义.

您可以学习开源应用程序架构(freely available).您可能会发现很多有用的相关示例.

点赞