Вы не сможете отправлять напрямую из 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
или что угодно, что вам нравится или вам удобно.