【发布时间】:2016-01-10 05:00:29
【问题描述】:
我正在使用 Puma 和 Tubesock 处理 websocket 消息,并希望访问处理发送消息的库文件中的已连接 websocket 列表。我要做的是检查用户是否通过 websocket 连接,如果没有通过推送通知发送消息。
用户使用包含其用户 ID 的路径连接到 websocket:
# config/routes.rb
Rails.application.routes.draw do
get 'ws/:user_id', to: 'socket#ws', as: :socket
end
并在控制器内部使用 Tubesock
class SocketController < ApplicationController
include Tubesock::Hijack
def ws
hijack do |tubesock|
@wsTube = tubesock
tubesock.onopen do
socket_user = User.find_by_user_id(params[:user_id])
# setup to send/receive messages through /lib/notification.rb
end
tubesock.onclose do
# cleanup when connection closes
end
end
end
end
我曾考虑在数据库中为用户添加一个属性,但我担心连接是否突然结束,例如在重新启动期间,然后该属性会说已连接,如果事实并非如此。理想情况下,我想检查活动连接,而不是在打开和关闭期间切换属性。
【问题讨论】:
标签: ruby-on-rails ruby websocket puma