2017-05-31 166 views
0

我已经做了一些搜索,并找不到有关此主题的任何更新的答案,看到答案仅适用于旧版本的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) { 

} 

我能够在更多的代码添加?如:

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

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

} 

我希望这个单一的node.js实例一次侦听两个不同的端口。这样可以适当地处理两种不同类型的客户端,方法是让它们连接到适当的套接字,然后以不同的方式处理这两个组。

如何做到这一点?

+0

你有没有考虑这样做的命名空间'socket'这是客户仍然连接到一个特定的端口,但他们去一个单独的命名空间? –

+0

@SamuelToh对不起,我不明白 – pizzae

回答

0

我很确定一个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')(http); 

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

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

}); 

顺便说一句,我认为你可以处理多种不同类型的客户通过使他们加入不同的命名空间的一个插槽。从socket.io文档:

https://socket.io/docs/#restricting-yourself-to-a-namespace

https://socket.io/docs/rooms-and-namespaces/#

0

我不知道什么是app,假设你使用的是流行的express服务器模块。是的,这是可能的。

你可以做的是让主要的NodeJS进程产生2 express servers。每个在特定的端口上进行侦听。然后有2个套接字绑定到服务器。

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

这是假设您的业务广泛增长。 1选项是查看套接字中的名称空间。如果你很乐意讨论,让我知道你已经开启了一个新的话题。

实施例:

服务器:

global.appRoot = require('app-root-path'); 

var express = require('express'); 
var session = require('express-session'); 
var app = express(); 

var server1 = app.listen(7788, "0.0.0.0", function() { 
    console.log('Server listening on port ' + server1.address().port); 
}); 

var server2 = app.listen(5566, "0.0.0.0", function() { 
    console.log('Server listening on port ' + server2.address().port); 
}); 

var socket = require('socket.io').listen(server1); 
var socket2 = require('socket.io').listen(server2); 

socket.on('connect', function (socket) { 
    console.log("hi socket 1"); 
}); 

socket2.on('connect', function (socket) { 
    console.log("hi socket 2"); 
}); 

客户:

<!doctype html> 
<html> 
    <head> 
     <script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js'></script> 
     <script> 
      var socketClient1 = io('ws://localhost:5566'); 
      var socketClient2 = io('ws://localhost:7788'); 
     </script> 
    </head> 
    <body> 
     <ul id='messages'></ul> 
    </body> 
</html> 

输出:

服务器侦听端口7788

服务器侦听端口5566

喜插座1

喜插座2

0
var express = require("express"); 

    var app = express(); 

    app.get('/',function(req,res){ 
    console.log("Inside app get method"); 

    }); 

    app.listen(2000,function(){ 
     console.log("Server is running on port 2000"); 
    }); 

    app.listen(2001,function(){ 
     console.log("Server is running on port 2001"); 
    });