我正在构建一个应用程序,并决定将ActionCable用于websocket。我的目标是跟踪Actioncable中的每个用户,以便当他们取消订阅/关闭窗口时,可以将他们从运行列表中删除。用户加入时没有问题,我将他们推送到列表中;但是,我似乎无法建立允许我设置current_user属性的连接。这是显示的错误。 ActionCable createConsumer is not a function
这是我尝试实现它的代码。
import { ActionCableProvider, ActionCable } from 'react-actioncable-provider'
import App from '../App'
import React from 'react';
const cable = ActionCable.createConsumer('ws://localhost:3000/cable')
export default function Container (props) {
return (
<ActionCableProvider cable={cable}>
<App />
</ActionCableProvider>
)
}
我的后端看起来像这样。 //app/channels/lobbies_channel.rb
class LobbiesChannel < ApplicationCable::Channel
def subscribed
@lobby = Lobby.find(params[:lobby_id])
stream_for @lobby
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end
这是我的connection.rb文件,由于尚未被触发或到达byebug,所以我尚未建立该文件。
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
end
def connect
byebug
self.current_user = find_verified_user
end
private
def find_verified_user
byebug
end
end
// routes.rb
Rails.application.routes.draw do
resources :lobbies, only: [:index, :create, :destroy]
resources :users, only: [:create, :update, :destroy]
post '/available' => 'lobbies#checkAvail'
post '/joinlobby' => 'lobbies#joinLobby'
mount ActionCable.server => '/cable'
end
有人可以帮助我设置动作电缆提供商以触发连接文件吗?
答案 0 :(得分:0)
您需要从ActionCable
包中导入actioncable
。如果您看,ActionCable
导出的react-actioncable-provider
实际上是一个React组件,而不是库:
import ActionCable from 'actioncable'
import ActionCableProvider from 'react-actioncable-provider'
import App from '../App'
import React from 'react'
// ...