如何将socket.io与已开发的节点应用程序集成

时间:2017-03-04 16:27:06

标签: node.js express socket.io

我开发了一个在端口3000中运行的节点应用程序。我使用了MEAN Stack。 还参考了一些教程,我开发了一个在端口3001上运行的socket.io聊天应用程序。

如何将此聊天应用程序集成/添加到我的MEAN Stack应用程序中。如何同时运行两个服务器/端口?

  

socket.io

var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
nicknames = [];

server.listen(3001);

 app.get('/',function(req, res){
  res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection',function(socket){
socket.on('new user', function(data, callback){
    if (nicknames.indexOf(data) != -1){
        callback(false);
    }else {
        callback(true);
        socket.nickname = data;
        nicknames.push(socket.nickname);
        updateNicknames();
    }

});

function updateNicknames(){
    io.sockets.emit('usernames', nicknames);
}


socket.on('send message',function(data){
    io.sockets.emit('new message',{msg:data, nick:socket.nickname});

});

socket.on('disconnect',function(data){
    if(!socket.nickname) return;
    nicknames.splice(nicknames.indexOf(socket.nickname), 1);
    updateNicknames();
});

});

2 个答案:

答案 0 :(得分:0)

您可以创建全局事件并在它们之间进行通信。你可以将emit函数添加到middlewere for express。

https://nodejs.org/api/events.html

答案 1 :(得分:0)

如果它仍然有意义(我相信是因为同样的原因,我来这里)是这样做的:

server.listen(app.get('port'), () => {
  console.log(`Socket is listening on port: ${app.get('port')}`);
});

P.S。这是为了防止您使用Express生成器搭建应用程序

从这里Github link