【发布时间】:2012-01-07 22:43:26
【问题描述】:
我正在尝试用 C 语言为协作式实时编辑器 http://en.wikipedia.org/wiki/Collaborative_real-time_editor 创建一个套接字服务器,但我不知道最适合它的服务器架构是什么。
一开始,我尝试将 select 用于套接字服务器,但在那之后,我阅读了有关 epoll 的内容,现在我认为 epoll 是最好的选择,因为客户端会发送用户将写入的每一个字母textarea,到服务器,所以服务器将分配数据来处理。
另外,我想在 epoll 中使用线程,但我不知道如何使用它们。我想使用线程,因为我认为在目标机器上使用 2 个或所有 CPU 会更好。
我的计划是
服务器启动时创建2个线程
第一个线程将分析新客户端并为读取或发送做好准备
第二个线程将负责从/向客户端读取和发送数据
问题是这 2 个线程将使用带有 epoll_wait 的 while(1)。
我的问题是,这是一个使用 epoll 和线程的好服务器架构吗?如果没有,我有什么选择?
编辑:我不能使用 libevent 或 libev 或其他库,因为这是一个大学项目,我不允许使用外部库。
【问题讨论】:
-
我建议不要使用 epoll,因为它不是普遍可用的,并且您在弄清楚架构时从简单的东西开始。此外,如果您有大量连接,epoll 也很好,但是当您只有几个连接时,响应时间就没有关系了。
-
除非你设法使 CPU 的一个核心饱和,否则没有理由去多线程。为此,您需要 10,000 个客户(如果您的应用程序编写得很好)。
标签: c multithreading sockets pthreads epoll