Node.js Socket.io在多个端口上侦听?

Node.js Socket.io在多个端口上侦听?,node.js,socket.io,Node.js,Socket.io,我做了一些搜索,但找不到有关此主题的任何更新答案,因为找到的答案仅适用于较旧版本的Socket.io 这是我的密码: let http = require('http').Server(app); let io = require('socket.io')(http); http.listen(7000, '::1', function () { // Now listening }); io.on('connect', function (socket) { } 我能添加额外的

我做了一些搜索,但找不到有关此主题的任何更新答案,因为找到的答案仅适用于较旧版本的Socket.io

这是我的密码:

let http = require('http').Server(app);
let io = require('socket.io')(http);

http.listen(7000, '::1', function () {
    // Now listening
});

io.on('connect', function (socket) {

}
我能添加额外的代码吗?例如:

http.listen(8000, '::1', function () {
    // Now listening
});

io2.on('connect', function (socket) {

}
我希望这个node.js实例能够同时监听两个不同的端口。这样我就可以适当地处理两种不同类型的客户端,方法是让它们连接到相应的套接字,然后以不同的方式处理这两个组


如何做到这一点?

我很确定一个HTTP实例不能侦听多个端口。您应该尝试以下方法:

let http = require('http').Server(app);
let io = require('socket.io')(http);

io.on('connect', function (socket) {

});

http.listen(7000, '::1', function () {
    // Now listening
});

let http2 = require('http').Server(app);
let io2 = require('socket.io')(http2);

http2.listen(7001, '::1', function () {
    // Now listening
});

io2.on('connect', function(socket){

});
顺便说一下,我认为您可以通过使多个不同类型的客户机加入不同的名称空间,用一个套接字处理多个不同类型的客户机。从socket.io文档:


假设您使用的是流行的
express
服务器模块,我不确定
应用程序是什么。是的,这是可能的

您可以做的是让主NodeJS进程生成
2台express服务器
。每个侦听器都在特定端口上侦听。然后有两个套接字,每个套接字绑定到一个服务器

注意: 这种设计有一个主要的缺点,因为你永远不知道将来可能会有多少客户。您可以继续复制代码以生成
n
数量的服务器和套接字,但最终将耗尽要绑定的端口

这是假设您的业务广泛增长。第一个选项是查看套接字中的名称空间。如果您愿意讨论,请告诉我您是否有新的话题

示例:

服务器:

客户:


var socketClient1=io('ws://localhost:5566');
var socketClient2=io('ws://localhost:7788');
    输出:

    服务器正在侦听端口7788

    服务器侦听端口5566

    高插座1

    高插座2


    我认为您可以在socketio.js文件中执行类似操作

    var port;
    
    if(!process.argv[2] || isNaN(process.argv[2]))
    {
        port = 3030;
        console.log('Port is not set. Default port 3030 is applied');
    }
    else
    {
        port = process.argv[2];
        console.log('port is set to ' + port);
    }
    
    /**
     * Start Listening For Socket IO Connection Requests
     *
     */
    http.listen(port, function ()
    {
        console.log('Socket IO listening on port : ' + port);
    });
    
    可以使用您的特定端口像这样运行socket IO服务器

    node socketio.js 3035
    
    或者通常没有指定的端口

    node socketio.js
    

    这样,您就可以随心所欲地运行许多套接字IO服务器实例。希望这会对某些人有所帮助。

    您是否考虑过在
    套接字中使用名称空间,即客户仍然连接到特定端口,但它们转到单独的名称空间?@SamuelToh抱歉,我不理解像ardilgulez这样的程序在第二个实例中忘记将http更改为http2
    
    var port;
    
    if(!process.argv[2] || isNaN(process.argv[2]))
    {
        port = 3030;
        console.log('Port is not set. Default port 3030 is applied');
    }
    else
    {
        port = process.argv[2];
        console.log('port is set to ' + port);
    }
    
    /**
     * Start Listening For Socket IO Connection Requests
     *
     */
    http.listen(port, function ()
    {
        console.log('Socket IO listening on port : ' + port);
    });
    
    node socketio.js 3035
    
    node socketio.js