我正在考虑用Rails实现国际象棋(需要websocket),并在生产部署中使用Nginx作为一堆独角兽进程的反向代理。
在思考如何使其发挥作用时,我提出了以下问题:
据我所知,网络套接字是一种持久的连接。既然一切都通过反向代理Nginx,Unicorn工作进程究竟该如何维护与客户端浏览器的websocket连接?Nginx会维护每个浏览器websocket连接到哪个Unicorn进程的状态,并充当一种中介吗?在Unicorn进程中保持持久的websocket连接是否会阻塞整个工作进程?
有没有推荐的使用Rails实现国际象棋(使用websockets)的方法?
将Unicorn的同步处理与使用nginx的异步交付连接起来,意味着nginx方面的一些逻辑至少对我来说很尴尬。最多-不可能。
有一个关于Private Pub gem的Railscast使用了瘦网络服务器。它更适合这个任务:它是异步的,能够用基于事件的IO处理许多并发请求。所以我建议你用Thin取代Unicorn,或者并排安装Thin。
彪马网络服务器也可能是一个选择,然而,我不能提供更多的信息。
nginx不会做websocket。你确定用AJAX不能做到这一点吗?如果你真的需要推送功能,你可以尝试一些围绕Comet方法构建的东西:http://en.wikipedia.org/wiki/Comet_(编程)
Faye是在rails中实现comet的一颗非常好的宝石:http://faye.jcoglan.com/