使用带Nginx和Unicorn的Websockets的Rails?

时间:2013-02-16 02:47:00

标签: ruby-on-rails ruby-on-rails-3 nginx websocket unicorn

我正在考虑使用Rails实现国际象棋(需要websockets),并在生产部署中使用Nginx作为一系列Unicorn进程的反向代理。

在考虑如何完成这项工作时,我得到了以下问题:

据我所知,websockets是持久连接。因为一切都通过反向代理Nginx,Unicorn工作进程究竟会如何维护到客户端浏览器的websocket连接? Nginx会维护每个浏览器websocket连接到哪个Unicorn进程的状态并充当一种中介吗?在Unicorn进程中保持持久的websocket连接会阻塞整个工作进程吗?

是否有推荐的方法使用Rails实现国际象棋(使用websockets)?

2 个答案:

答案 0 :(得分:1)

将Unicorn的同步处理与使用nginx的异步传递连接起来意味着nginx端的一些逻辑对我来说至少是尴尬的。最多 - 不可能。

有一个关于使用Thin webserver的Private Pub gem的Railscast。它更适合这项任务:它是异步的,它能够处理许多基于事件的IO的并发请求。所以我建议你用Thin替换Unicorn或者并排安装Thin。

Puma网络服务器也可能是一个选项,但是,我无法提供更多相关信息。

答案 1 :(得分:-4)

nginx不会做websockets。你确定你不能用AJAX做到这一点吗?如果你真的需要推送功能,你可以尝试围绕Comet方法构建的东西:http://en.wikipedia.org/wiki/Comet_(programming)

Faye是在铁轨中实施彗星的一个非常好的宝石: http://faye.jcoglan.com/