Javascript 两个node.js应用程序之间的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

我有两台服务器,一台用于后端应用,另一台用于前端。它们是抽象的,但共享同一个数据库,我需要两者都使用socket.io在彼此之间通信实时事件

前端

// 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
    一起工作,我之前认为它被贬值了?