【发布时间】:2017-11-17 07:39:44
【问题描述】:
我想在 Rails ActionCable 之间创建一个连接,它将充当 Server 和 NodeJs 作为 Client。
这是我在connection.rb 文件中的代码。
# app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :uuid
def connect
self.uuid = SecureRandom.uuid
end
end
end
这是我频道的代码。
# app/channels/socket_connection_channel.rb
class SocketConnectionChannel < ApplicationCable::Channel
def subscribed
stream_from "socket_connect"
end
def speak
ActionCable.server.broadcast("socket_connect",
message: "Connected")
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end
这是 server.js 文件中的 NodeJs 代码
const WebSocket = require('ws');
const ws = new WebSocket('ws://0.0.0.0:3001/cable');
ws.on('open', function open() {
ws.send(JSON.stringify({'data': 'Sample Data'}));
});
ws.on('message', function incoming(data) {
console.log(data);
});
ws.on('socket_connected', function incoming(data) {
console.log('socket');
});
当我运行服务器时node server
{"type":"welcome"}
{"type":"ping","message":1497487145}
{"type":"ping","message":1497487148}
{"type":"ping","message":1497487151}
并且在 Rails 服务器上显示以下日志
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-06-15
02:39:02 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Registered connection (5db66385-0923-4633-8837-ba957fc0a7f5)
Received unrecognized command in {"data"=>"Sample Data"}
我想要实现的是node server 将在rails ActionCable 上建立Websocket 连接并订阅SocketConnect 频道并将transmit 数据通过此频道发送到Rails 服务器。
我在 Rails 操作服务器上找到了一些 chat 应用程序示例,其中 client 和 server 都位于 smae rails 平台上。但是,我还没有找到任何 client 位于与服务器不同的平台上的示例。
但是,我无法为这个通道找到Subscribe 的任何方法,并在两端建立稳定的连接来传输数据,我也不知道如何从这个请求中获取数据。
请帮助我。提前致谢
【问题讨论】:
标签: ruby-on-rails node.js websocket client-server actioncable