`sinatra/websocketio` 的基本用法 gem

Basic use of `sinatra/websocketio` gem

我正在尝试使用 sinatra/websocketio gem 并且我基本上是从他们的自述文件中复制粘贴的,但我无法让它工作。我错过了什么吗?我认为套接字端口和 Sinatra 端口应该是相同的。我感谢任何帮助或提示。

JavaScript:

<script>
    var io = new WebSocketIO().connect();
    // io.on("log", function(value) {
    //     alert(value)
    // });
</script>

Sinatra 服务器:

require 'sinatra'
require 'sinatra/websocketio'

set :port, 5005
set :bind, '0.0.0.0'
set :public_folder, "#{File.dirname(__FILE__)}/views"
set :websocketio, port: 9000
enable :sessions


get '/list' do
  "Hello world!"
end

get '/' do
  erb :index, layout: :layout
end

JavaScript 端无法连接:

看起来像Sinatra::WebSocketIOonly starts up once an EventMachine reactor is running. This is the case when running a EventMachine-based Rack server (such as Thin)。将 Rack 服务器切换为 Thin 可以很好地启动 WebSocketIO 服务器。

如果不能切换到 Thin,您还可以在 config.ru:

中启动 EventMachine 反应器
require_relative "./server"  # assuming your server code is in `./server.rb`

run Sinatra::Application

# EventMachine.run blocks the active thread, therefore it's started in a separate one
Thread.new { EventMachine.run }

然后可以使用 bundle exec rackup -p 5005

启动 Rack 服务器