我目前正在为我正在编写的具有实时提要的应用程序使用em-websocket
。我现在遇到的问题是,需要与用户帐户相关的某些信息才能为客户端订阅正确的订阅源,这意味着我需要访问会话数据。因为WebSocket服务器在一个单独的进程中运行,并且不能访问这些数据,所以我需要找到一些解决方法。
有websocket-rails
,但这个项目似乎被放弃了,我不完全确定是否在生产中使用废弃软件。
有没有一个同时使用WebSockets和Rails的应用程序的好例子?
如果您使用Thin作为服务器,Faye可以作为Rack应用程序添加。https://github.com/faye/faye-websocket-ruby
还有一个rails助手:https://github.com/jamesotron/faye-rails
Faye有详细的安全和身份验证信息,尽管与rails没有直接关系。大多数人似乎使用Rails中的CSRF令牌作为链接。
Rails将会话数据存储在"加密"cookie中。。。这是一个"足够好"的解决方案,但我会避免在那里存储任何敏感信息。
Rails API还允许您手动解码会话cookie(查找它,它没有那么困难,但它取决于版本)。这意味着您可以通过访问原始加密cookie来访问Rails会话数据(但我不会那样设置数据)。
您还可以使用一个自定义的短命(通常是一次性)"令牌"cookie,该cookie将由websocket连接用于初始化与websocket相关的任何身份验证数据。
我不知道em-websockets
是否允许您访问cookie,但我知道[Plezi框架](http://www.plezi.io]为您提供对cookie的访问和本地会话存储(这可能更安全,但cookie劫持总是有风险的)。
您可以很容易地将Plezi websockets与Rails集成,如这里所述。