C中网络的数据驱动方法。这不可能是新的吗?

时间:2011-03-24 20:55:22

标签: c networking data-driven

我想知道之前是否已经完成过这样的事情:

我最近开始研究C中的网络库。该库维护着一组套接字,每个套接字都与两个FIFO字节流,输入和输出相关联。

使用该库的开发人员需要注册一些回调,包括识别器函数和处理函数。如果新数据到达套接字(即输入流),则调用每个识别器。如果其中一个识别器找到匹配的数据部分,则调用其关联的处理程序,消耗数据并可能在套接字的输出流上排队新数据,计划稍后传输。

这是一个清楚如何使用库的示例:

// create client socket
client = nc_create(NC_CLIENT);

// register some callback functions that you'll have to supply yourself
nc_register_callback(client, &is_login, &on_login);
nc_register_callback(client, &is_password, &on_password);

// connect to server
nc_dial(client, "www.google.com", "23");

// start main loop (we might as well have more than one connection here)
nc_talk();

对我而言,这是在C中编写通用网络库的最明显方式。我使用Google进行了一些研究,但我无法找到用C语言编写的类似内容。但很难相信我是第一个实现这种方法的人。

还有其他数据驱动的通用C网络库吗?
你会用它们吗?

1 个答案:

答案 0 :(得分:1)

这里有一些提供类似API的库,(在各个级别,例如libevent提供了一个用于套接字/文件描述符的通用回调驱动API)

libesmtpexample

libevent

libcurl

Sun / OncRPC API具有类似的风格,因为库为您完成了繁重的工作,将请求分派给正确的回调处理程序。

Java nettymina库的工作方式类似,但更面向对象。