1

我正在用 C 语言编写我的第一个单线程、单进程服务器,使用 kqueue() / epoll() 来处理异步事件分派。正如人们所预料的那样,跟踪控制流比在阻塞服务器中要困难得多。

是否有一种常见的模式(甚至可能有一个名字)人们用来避免回调驱动的协议实现变成一个巨大的纠结的毛球?

或者,是否有任何用 C 语言编写的非阻塞服务器,其源代码很容易阅读?

任何输入将不胜感激!

更多想法:

很多麻烦似乎来自处理 IO 缓冲的需要。缓冲区填充/排出和单个状态转换之间没有必要的对应关系。缓冲区填充/排水可能对应于 [0, N] 状态转换。)

我看过 libev(此处的文档),它看起来是一个很棒的工具,还有 libevent,它看起来不那么令人兴奋但仍然有用,但它们都没有真正回答这个问题:我如何以一种方式管理控制流不是非常不透明。

4

1 回答 1

1

您可以尝试使用State ThreadsGNU Portable Threads之类的东西,这样您就可以像在每个连接中使用单个线程一样进行编写(实现使用Fibers)。

或者,您可以使用状态机生成器(例如Ragel)构建您的协议实现。

于 2011-05-06T14:10:27.393 回答