我使用Sinatra已经有一段时间了,我想通过websockets推送数据,为我的web应用程序添加一些实时功能.

我已经成功地单独使用了gem'em websocket',但没有编写一个包含sinatra web服务器和web套接字服务器的ruby文件.

我试过旋转 run !或者开始!方法在单独的线程中关闭,但没有成功.

有人用过这个吗?

我希望将它们放在同一个文件中,以便在两台服务器之间共享变量.

谢谢

推荐答案

没有try 过,但不应该太难:

require 'em-websocket'
require 'sinatra/base'
require 'thin'

EM.run do
  class App < Sinatra::Base
    # Sinatra code here
  end

  EM::WebSocket.start(:host => '0.0.0.0', :port => 3001) do
    # Websocket code here
  end

  # You could also use Rainbows! instead of Thin.
  # Any EM based Rack handler should do.
  Thin::Server.start App, '0.0.0.0', 3000
end

此外,Cramp还有一个websocket实现,可以直接与瘦/彩虹一起工作!您可能能够提取,因此甚至不需要在另一个端口上运行服务器.

Ruby相关问答推荐

CarrierWave Multi-uploader重命名现有文件

Homebrew 的 ruby​​ 和Homebrew Ruby有什么区别?

当 node 名称是/包含整数时,使用 Nokogiri 解析非 XML 文档

如何在 Ruby 中创建可调用属性

在 ruby​​ 中提取文档中的主题标签和部分

如何解密在 sjcl.js 中使用 ruby​​ 创建的 AES-256-GCM

环绕分隔线,保留第一列,最小最终长度

确保 Capybara 不存在元素

Ruby on Rails 中是否有简写 if(没有 else)语句?

从href html标签中提取带有Ruby中nokogiri的链接(URL)?

判断文件是否包含字符串

Rails 类 << self

我可以在 Ruby 2.x 中要求命名参数吗?

就地修改 ruby​​ 哈希(rails strong params)

在 Rails 中,如何向 String 类添加新方法?

Jekyll - 找不到命令

什么是匹配不在行尾的字符串的正则表达式?

是否有更简单的(单行)语法来别名一个类方法?

使用 Ruby CSV 在导出的 CSV 中更改字段分隔符/分隔符

如何重命名 gemset?