Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 服务器-同步I/O多路复用(套接字)_C_Sockets_Libevent - Fatal编程技术网

C 服务器-同步I/O多路复用(套接字)

C 服务器-同步I/O多路复用(套接字),c,sockets,libevent,C,Sockets,Libevent,我在C/Linux中实现了一个使用TCP套接字的聊天服务器。它当前使用单个进程,并使用select()防止服务器阻塞。我已经读到select()是一个非常慢的方法,我希望将服务器升级到一个更高效的版本 我目前正在研究libevent,但我希望有设计快速服务器代码经验的人能给我一些关于最快技术的建议。libevent是一个可靠的选择,还是有更好的选择值得我研究 我真的很感激任何帮助 对于Linux(仅限),您可以使用epoll,它在大多数情况下(但不是所有情况下)都更快 epoll的主要缺点是它仅

我在C/Linux中实现了一个使用TCP套接字的聊天服务器。它当前使用单个进程,并使用select()防止服务器阻塞。我已经读到select()是一个非常慢的方法,我希望将服务器升级到一个更高效的版本

我目前正在研究libevent,但我希望有设计快速服务器代码经验的人能给我一些关于最快技术的建议。libevent是一个可靠的选择,还是有更好的选择值得我研究

我真的很感激任何帮助

对于Linux(仅限),您可以使用epoll,它在大多数情况下(但不是所有情况下)都更快

epoll的主要缺点是它仅在Linux操作系统上受支持(不可移植)


在摘要说明中,epoll可以监视大量描述符,并且只返回更改的描述符列表(无需传递所有原始描述符列表)。

您应该查看一下。谢谢,我会查看它。你有什么理由喜欢这个软件吗?它使用比libevent更快的libev,它是跨平台的,与windows一起工作,并且有一点抽象。我没有在C中做过任何异步工作,所以没有经验。您已经读到select()很慢-您的聊天服务器慢吗?使用更快的技术真的会有什么不同吗?我将对此进行研究。您的意思是epoll比select()快还是比libevent等库快?谢谢epoll最终是一个系统调用,它直接在内核上运行。库可以使用epoll、poll、select或其他方法来执行其工作。很明显,它们的开销很小,但这取决于你如何准确地看到开销。从积极的一面来看,一个库通常是可移植的,可以在多个体系结构/系统下使用,甚至允许从一个工具到另一个工具的简单迁移。。。它是低级方法(如epoll)的抽象。