c-拆分服务器进程的最佳方式



我正在用C构建一个服务器,它不仅监听传入连接,还为我提供了一个交互式shell。基本上,我有这样的东西来接受客户。。。

while (1) {
accept_client(serverfd);
}

像这样的东西来创建交互式外壳

while (1) {
printf("shell> ");
fgets(command, sizeof(command) - 1, stdin);
server_do(command);
}

我想并行运行这两个循环,交互式shell可以实时访问服务器上的变量。我尝试使用fork,它运行得很好,但总体上不成功,因为fork只创建子进程的一个副本,并且当新连接发生时,没有一个变量可以更新。我也试过用管道传输数据,但那是一场灾难(尽管我可能做错了(。最后,我尝试使用pthread,但没有发现任何明显的方法可以使两者并行运行而不阻塞。

什么是";正确的";怎么做?我已经做了相当多的研究,还没有偶然发现一个明显的答案。

您也可以将"stdin"视为"网络连接",它们在低级视图中都是"fd"。

因此,您需要实现一个并行处理多个连接的服务器,有很多方法可以做到这一点。

这是一本很好的读物(http://www.wangafu.net/~nickm/libfevent-book/01_intro.html(来解释和比较这些方法。

我希望在您的情况下以异步方式实现。我写了一些包装纸和样品(https://github.com/grizzlybears/tevpp)使libevent更易于使用。"cat"示例演示如何像处理普通连接一样处理stdio。您可能感兴趣。:(

最新更新