关于javascript:两个Node.js应用之间的Socket.io触发事件?

Socket.io trigger events between two node.js apps?

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

前端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 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);
    });


});

后端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//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在前端触发messageFromClient x3>?


在这种情况下,您真的不需要在前端启动socket.io服务器。

使它工作的方式是:

  • 保持后端不变,用作Socket.IO服务器
  • 在字体末尾,使用Socket.IO客户端连接到服务器。
  • 您可以通过调用

    来安装客户端

    npm install socket.io-client

    ,然后使用:

    连接到服务器

    1
    2
    3
    4
    5
    6
    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' });

    然后,您可以使用相应的用户名创建套接字对象的映射,并根据您的业务逻辑向该用户发送消息。

    更多信息:

    您可能必须添加诸如客户端断开连接之类的案例。您可以在此处了解有关回调的更多信息:

    https://github.com/Automattic/socket.io-client