2017-05-31 163 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"); 
    });