from websocket-rails wiki,当我们使用Phusion Passenger或Unicorn时,websocket-rails需要作为独立服务器启动,但我发现faye-rails不需要这样做。
区别在于用于"劫持"或控制套接字的API。
两种解决方案都将原始套接字从原始服务器带走,并独立于服务器处理它…然而,websocket-rails
使用基于EventMachine的API,而Faye检查不同的支持选项,如hijack
API。
因此,当使用非EventMachine的服务器时,websocket-rails
不能从服务器中取出套接字,而是运行一个单独的服务器,只处理Websocket连接。
其他方法包括服务器端支持websocket协议,按照websocket机架规范草案的建议,它是由碘实现的(免责声明,这是我的项目)。其他平台(例如Puma)也在努力支持该规范。
这种方法将套接字的控制留给原始服务器,允许原始服务器处理所有协议细节。它通常允许更好的资源处理,因为套接字处理是统一的,并且通常更好地优化了资源使用。而且,使用这种方法可以避免代码重复,并且内存占用通常更小。
这个新规范和方法的另一个好处是,编写体面服务器的人通常更了解网络和服务器编程问题(如慢客户端DoS攻击问题等),从而允许更健壮和安全的Websocket实现。
公立小学如果可能的话,我会避免websocket-rails
, ActionCable可能会有更好的Rails集成和意外的套接字劫持可能会破坏中间件,导致奇怪的bug(在某一点hijack
会导致奇怪的数据库连接池问题,其中连接不返回到池)。
祝你好运!