Javascript 两个node.js应用程序之间的Socket.io触发事件?
我有两台服务器,一台用于后端应用,另一台用于前端。它们是抽象的,但共享同一个数据库,我需要两者都使用socket.io在彼此之间通信实时事件 前端Javascript 两个node.js应用程序之间的Socket.io触发事件?,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我有两台服务器,一台用于后端应用,另一台用于前端。它们是抽象的,但共享同一个数据库,我需要两者都使用socket.io在彼此之间通信实时事件 前端 // serves a front end website var appPort = 9200; var express = require('express'); var app = express(); var http = require('http'); var server = http.createServ
// serves a front end website
var appPort = 9200;
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
socket.on('createRoom', function(room) {
socket.join(room); // use this to create a room for each socket (room) is from client side
});
socket.on('messageFromClient', function(data) {
console.log(data)
socket.broadcast.to(data.chatRoom).emit('messageFromServer', data);
});
});
后端
//Serves a back end app
var appPort = 3100;
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
socket.on('createRoom', function(room) {
socket.join(room); // use this to create a room for each socket (room) is from client side
});
socket.on('messageFromClient', function(data) {
console.log(data)
socket.broadcast.to(data.chatRoom).emit('messageFromServer', data);
});
});
作为一名管理员,我想登录到我的后端,在那里我可以看到所有登录的人,在那里我可以单击我想与之聊天的人
假设他们登录到前端网站,当管理员在客户端提交消息时,他们触发这个
socket.emit('messageFromClient',message)代码>如何使用端口9200
从后端端口提交3100
在前端触发messageFromClient
?对于此用例,您确实不需要在前端启动socket.io服务器
让它工作的方法是:
保持后端不变,它充当Socket.IO服务器
在字体端,使用Socket.IO客户端连接到服务器
您可以通过调用
npm安装socket.io-client
然后使用以下方式连接到服务器:
var io = require('socket.io-client'),
socket = io.connect('localhost', {
port: 3100
});
socket.on('connect', function () { console.log("socket connected"); });
socket.emit('messageFromClient', { user: 'someuser1', msg: 'i am online' });
然后,您可以使用相应的用户名创建套接字对象的映射,并根据您的业务逻辑向该用户发送消息
更多信息:
您可能需要添加诸如客户端断开连接等情况。您可以在此处阅读有关此情况的更多回拨信息:
使用redis在两个socket.io实例之间进行通信如何?有人建议,我想这样做,但在我追求这个想法之前,我想了解为什么它会有好处。你能给出一个答案来说明redis服务器将扮演什么角色吗。我不知道应该在哪里托管和部署redis服务器。我将阅读您提供的链接并尽可能仔细地研究它。我以前遇到过npm模块,但我需要安装第三个节点服务器,还是在现有服务器上安装它?我需要更好地了解它所起的作用。不过,我相信这是最好的解决方案。Redis主要用于将消息(事件)同步到多个服务器,这样,如果您有多个nodejs服务器,您可以使用Redis socketio模块将其连接起来,并且在任何一个服务器中接收到消息后,Redis会将此消息发送到所有其他连接的服务器。Redis可以安装在运行应用程序的同一台服务器上。谢谢你的解释,我一直在读这方面的文章。我只是对它的使用持怀疑态度,因为我不想安装第三台服务器。啊,好家伙,就在关键时刻。实际上,我是这样尝试的(从前端删除socket.io),我在前端包含了后端的socket.io脚本,但它仍然不起作用。我忘记了npm安装socket.io客户端
我将使用它,它应该很好地运行。我很难配置这个lol,但我只是想socket.io服务器:3100如何与:9200前端通信?我使用var socket=io.connect('http://localhost:3100');代码>而不是var socket=io('http://localhost:3100');
是医生说要使用的,它给我带来了什么麻烦,但它与connect
一起工作,我之前认为它被贬值了?