将同步http请求/响应模型与基于异步队列的模型连接起来的好方法是什么?
当用户的HTTP请求到来时,它会生成一个进入队列的工作请求(在本例中为beanstalkd).其中一名工人接受请求,完成工作并准备回复.
队列模型不是请求/响应 - 只有请求,而不是响应.所以问题是,我们如何才能最好地将响应反馈回HTTP世界并返回给用户?
思路:
Beanstalkd支持轻量级主题或队列(他们称之为管).我们可以为每个请求创建一个管,让工作人员在该管上创建一条消息,让http进程坐下并等待管的响应.不要特别喜欢这个,因为它有apache进程坐着记忆.
让http客户端轮询响应.用户的初始HTTP请求将启动队列上的作业并立即返回.客户端(用户的浏览器)定期轮询响应.在后端,工作人员将其响应放入memcached,我们将nginx连接到memcached,因此轮询很轻.
使用Comet.类似于第二个选项,但与更高级的http通信,以避免轮询.
我倾向于2,因为它很容易且很清楚(我还没有用过彗星).我猜我可能还有一个更好的模型,我没有想过.你怎么看?