可以通过在Node上运行的Socket从Rails发布吗?

时间:2018-06-05 01:09:30

标签: ruby-on-rails node.js websocket

我们说我使用node.js运行服务器,并将Socket.io附加到它。 现在我可以从中发出声音,让我们说我的前端应用可以与之对话。

我是否可以使用Rails通过使用与node.js一起运行的Socket服务器发送到同一个前端应用程序?

1 个答案:

答案 0 :(得分:1)

你无法直接从铁轨发射到同一个插座。

您可以做的是在rails& amp;之间建立进程间通信(IPC)。 node.js,当从rails收到消息时,将该消息发送到前端。

这是一个使用unix套接字的例子,它需要你的rails& amp; node.js app在同一台机器上运行。

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}`);
});

我不知道任何红宝石,但现在你需要写信给/tmp/ipc.sock

看起来应该是这样的(再说一次,我不知道红宝石)

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

Unix套接字是处理IPC的众多方法之一,您可以使用RedisRabbitMQ或任何您喜欢或感觉舒适的方式。