Можно ли публиковать из Rails через Socket, который работает на Node? - PullRequest
0 голосов
/ 05 июня 2018

Допустим, я запускаю сервер с node.js и присоединяю к нему Socket.io.Теперь я могу получать из него данные, и, скажем, мое интерфейсное приложение может с ним общаться.

Могу ли я использовать Rails для передачи в то же интерфейсное приложение через тот сервер Socket, который я запускал с помощью node.js?

1 Ответ

0 голосов
/ 05 июня 2018

Вы не сможете отправлять напрямую из rails в один и тот же сокет.

Что вы можете сделать, это настроить межпроцессное взаимодействие (IPC) между rails & node.js и когда сообщениеполученные от 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}`);
});

Я не знаю никакого рубина, но теперь вам нужно написать в /tmp/ipc.sock

Это должно выглядеть примерно так (Опять же, я не знаю рубина)

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

Unix-сокеты - это один из многих способов работы с IPC, вы можете использовать Redis, RabbitMQ или что угодно, что вам нравится или вам удобно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...