Socket.io触发两个node.js应用程序之间的事件?

时间:2015-01-14 22:06:36

标签: 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.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);如何使用端口messageFromClient在前端触发9200从后端端口3100提交?

1 个答案:

答案 0 :(得分:5)

对于这个用例,你真的不需要在前端启动socket.io服务器。

你可以让它发挥作用的方式是:

  1. 保持后端不变,充当Socket.IO服务器
  2. 在字体末端使用Socket.IO客户端连接到服务器。
  3. 您可以通过调用

    来安装客户端

    npm install 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' });
    

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

    更多信息:

    您可能需要添加客户端断开连接等案例。您可以在此处详细了解有关回拨的信息:

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