我们说我使用node.js运行服务器,并将Socket.io附加到它。 现在我可以从中发出声音,让我们说我的前端应用可以与之对话。
我是否可以使用Rails通过使用与node.js一起运行的Socket服务器发送到同一个前端应用程序?
答案 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的众多方法之一,您可以使用Redis
,RabbitMQ
或任何您喜欢或感觉舒适的方式。