Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否可以通过在节点上运行的套接字从Rails发布?_Ruby On Rails_Node.js_Websocket - Fatal编程技术网

Ruby on rails 是否可以通过在节点上运行的套接字从Rails发布?

Ruby on rails 是否可以通过在节点上运行的套接字从Rails发布?,ruby-on-rails,node.js,websocket,Ruby On Rails,Node.js,Websocket,假设我使用node.js运行服务器,并将Socket.io连接到它。 现在我可以从它身上发射,假设我的前端应用程序可以与它对话 我可以使用Rails通过使用我与node.js一起运行的套接字服务器向同一个前端应用程序发射吗?您将无法直接从Rails向同一个套接字发射 您可以做的是在rails和node.js之间设置进程间通信(IPC),当从rails接收到消息时,将该消息发送到前端 下面是一个使用unix套接字的示例,它要求rails&node.js应用程序在同一台机器上运行 const net

假设我使用node.js运行服务器,并将Socket.io连接到它。 现在我可以从它身上发射,假设我的前端应用程序可以与它对话


我可以使用Rails通过使用我与node.js一起运行的套接字服务器向同一个前端应用程序发射吗?

您将无法直接从Rails向同一个套接字发射

您可以做的是在rails和node.js之间设置进程间通信(IPC),当从rails接收到消息时,将该消息发送到前端

下面是一个使用unix套接字的示例,它要求rails&node.js应用程序在同一台机器上运行

const net = require('net');
const server = require('http').createServer();
const io = require('socket.io')(server);

server.listen(3000); // Socket.io server

const socketName = '/tmp/ipc.sock';
const unix = net.createServer(connection => {

    connection.on('data', data => {

        // data may be a JSON with a room name & message
        // If data is big enough, you may need to buffer data
        // and emit on `end`

        io.emit('some-event', data.toString()); // Emit data

        // connection.write('something'); if you want to send data back to rails

        connection.end();

    });

});

unix.listen(socketName, () => {
    console.log(`Socket started at ${socketName}`);
});
我不知道任何ruby,但现在您需要编写到
/tmp/ipc.sock

它应该是这样的(再说一遍,我不认识ruby)

Unix套接字是处理IPC的多种方法之一,您可以使用
Redis
RabbitMQ
或任何您喜欢或喜欢的方法

require 'socket'
socket = UNIXSocket.new("/tmp/ipc.sock")
socket.puts('some data')
# or maybe socket.write('some data')