并感谢您看一下这个问题.
背景
我有几台机器在很短的时间内连续产生多个(最多300)PHP脚本控制台.这些脚本快速运行(不到一秒钟)然后退出.所有这些脚本都需要只读访问大型trie结构,每次运行脚本时加载到内存中都非常昂贵.服务器运行Linux.
我的解决方案
创建一个C守护进程,将trie结构保存在内存中并接收来自PHP客户端的请求.它将收到来自每个PHP客户端的请求,对内存结构执行查找并回答答案,从而避免PHP脚本执行该工作.请求和响应都是短字符串(不超过20个字符)
我的问题
我是C守护进程和进程间通信的新手.经过大量研究,我已将选择范围缩小到Message Queues和Unix域套接字.消息队列似乎已经足够了,因为我认为(我可能错了)他们排队了守护进程的所有请求以连续回答它们.但是,Unix域套接字似乎更容易使用.但是,我有各种各样的问题,我无法找到答案:
数据结构的实际查找非常快,我不需要任何复杂的多线程或类似解决方案,因为我认为以FIFO方式处理请求就足够了.我还需要保持简单的愚蠢,因为这是一项关键任务服务,而且我对这类程序还是比较陌生的.(我知道,但我真的无法解决这个问题,学习经验会很棒)
我真的很感激代码片段,它为我所具有的具体问题提供了一些亮点.指南和指针的链接也将受到欢迎,这些指南将进一步了解这个低级别IPC的阴暗世界.
谢谢你的帮助!
现在比我在提出这个问题时所了解的要多得多,我只是想向任何感兴趣的人指出,Thrift框架和ZeroMQ在抽象硬件,套接字级编程方面做得非常出色.Thrift甚至可以免费为您提供服务器的脚手架!
事实上,不要去构建网络服务器的所有艰苦工作,而是考虑使用已经为您解决问题的良好异步服务器编写应用程序服务器代码.当然,使用异步IO的服务器非常适合不需要密集CPU处理的网络应用程序(或者事件循环块).
python的例子:Twisted,gevent.我更喜欢gevent,而且我不包括龙卷风,因为它专注于HTTP服务器端.
Ruby的例子:EventMachine
当然,Node.js基本上是当今异步服务器的默认选择.