根据我的理解,一旦您在处理完请求后调用FCGI_Accept(),服务器就会关闭与客户端的连接,因此无法向该客户端发送任何其他内容。因此,我想知道是否有任何方法可以阻止它并“保存”连接(句柄?),以便我可以在处理另一个请求后响应请求。我打算在Apache上使用mod_fastcgi,如果它有所作为。
故事:
我正在尝试在服务器上使用FastCGI创建一个即时消息系统,并在客户端使用Ajax长轮询。我们的想法是建立一个事件驱动的服务器,客户端的“获取”请求检查要返回的未完成消息,或者存储连接以供以后响应;并且“发送”请求检查与收件人的可用连接,或者如果不可用则将消息存储在存储器中。我首先使用FastCGI的唯一原因是因为它使用持久化进程,它允许连接之间的资源共享,所以我愿意接受其他建议。我知道你可以使用一个数据库作为共享资源,并让每个连接产生一个进程,轮询数据库以获取新信息,虽然它工作,但它看起来非常低效。我目前唯一能想到的另一种选择(如果FastCGI无法实现我所需要的)是创建一个实现上述功能的自定义Apache模块,但这可能比它的价值更麻烦。
我刚开始研究FastCGI,所以这可能不是解决我问题的最合适的解决方案,但这是我遇到的第一个障碍。提前谢谢。
答案 0 :(得分:2)
你所描述的与FastCGI没什么关系。这是连接较少的架构HTTP工作的方式。必须由客户端(和最好的情况下的服务器)保持长轮询。继续阅读http://xmpp.org/extensions/xep-0206.html
更先进但新技术是http://www.websocket.org/