如何解决拆分服务器进程的最佳方法
我正在用C构建服务器,该服务器不仅侦听传入的连接,还为我提供了一个交互式外壳。基本上,我有这样的事情来接受客户...
<!DOCTYPE HTML>
<html lang="en">
<head><!-- Google Tag Manager --> <script>(function(w,d,s,l,i) { w[l]=w[l]||[];w[l].push( { 'gtm.start': new Date().getTime(),event:'gtm.js' } );var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); } )(window,document,'script','dataLayer','GTM-XXXX');</script> <!-- End Google Tag Manager -->
<meta charset="UTF-8"/>
类似这样的东西来创建交互式外壳
while (1) {
accept_client(serverfd);
}
我想并行运行两个循环,而交互式外壳将实时从服务器访问变量。我尝试使用fork,该方法效果很好,但总体上还是不成功,因为fork只创建了子进程的副本,并且在发生新连接时无法更新任何变量。我还尝试使用pipe来传输数据-但这确实是一场灾难(尽管我可能做错了)。最终,我尝试使用pthread,但是没有发现任何明显的方式使两者并行运行而不阻塞。
执行此操作的“正确”方法是什么?我做了相当多的研究,还没有偶然发现一个显而易见的答案。
解决方法
您也可以将“ stdin”视为“网络连接”,它们都是低级视图中的“ fd”。
因此,您需要实现一个服务器,该服务器可以处理多个并行的连接, 有很多方法可以做到这一点。
这里是一本很好的读物(http://www.wangafu.net/~nickm/libevent-book/01_intro.html),用于解释和比较这些方法。
在您的情况下,我想以异步方式实施。 我编写了一些包装器和示例(https://github.com/grizzlybears/tevpp),以使libevent易于使用。 “ cat”样本演示了如何像正常连接一样处理stdio。您可能有兴趣。:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。