Node.js Socket.io在多个端口上侦听?
我做了一些搜索,但找不到有关此主题的任何更新答案,因为找到的答案仅适用于较旧版本的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) { } 我能添加额外的
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