首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rails应用程序启动em-websocket是一种好的做法吗

使用rails应用程序启动em-websocket是一种好的做法吗
EN

Stack Overflow用户
提问于 2012-08-02 04:58:15
回答 1查看 793关注 0票数 1

对于我的Rails-App,如果上传了新数据,我需要调用所有连接的客户端。所以我想使用websockets。目前,我已经在initializers中创建了一个新文件,它在一个新线程中启动套接字服务器:

代码语言:javascript
复制
require 'em-websocket'

$websocket_clients = []

Thread.new do
  EventMachine.run {
    EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
      ws.onopen {
        $websocket_clients << ws
      }

      ws.onclose {
        $websocket_clients.delete(ws)
      }

    end
  }
end

所以我可以使用

代码语言:javascript
复制
$websocket_clients.each do |ws|
  ws.send "text"
end

在我的控制器里。

我现在的问题是:这是一个很好的实践吗?我会遇到什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 07:04:39

这可能会在您解除应用程序的多点操作时出现问题。在部署应用程序时,通常会派生多个工作进程,每个工作进程处理请求-至少在两个最流行的服务器(Phusion Passenger和unicorn)中是这样。

每台服务器都会尝试启动一个websocket线程。第一个可以顺利启动,下一个可能会崩溃,因为端口被第一个阻塞了。如果您修复了这个问题,并且您只是使用代码将消息分发到客户端,如上面所述,它可能会正常工作,而不会出现大的问题。

但是,如果您开始查询数据库,只要不在ActiveRecord中启用线程安全,就会出现问题。当应用程序的websocket部分变得更大时,您可以将其放入一个额外的守护进程中,该守护进程独立于服务器进程处理请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11767486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档