2017-04-17 36 views
0

我工作的有2種類型用戶的應用程序。我想在兩個socket.io文件中分離出它們的功能。控制2 socket.io連接

index.js:

var io = require('socket.io').listen(server); 
require('/sockets/userType1')(io); 
require('/sockets/userType2')(io); 

userType1.js:

module.exports = function (io) { 
    io.on("connection", function (socket) { 
     console.log("Connected to userType1"); 
    }); 
} 

userType2.js

module.exports = function (io) { 
    io.on("connection", function (socket) { 
     console.log("Connected to userType2"); 
    }); 
} 

然而,當我從客戶端連接其連接到兩個(這我想我會期望,因爲我沒有任何區別我試圖連接的任何東西)。

有沒有辦法來定義的連接只能連接到那些socket.io類之一?或者我只需要依賴命名約定?

+1

看看[命名空間](https://socket.io/docs /間-和命名空間/#命名空間)。 – robertklep

+0

Thanks @robertklep多數民衆贊成正是我正在尋找 – Woodsy

+0

您不能有兩個單獨的socket.io服務器連接到同一個Web服務器。只是不能這樣做 - 他們都會看到所有傳入的請求,因爲客戶端的請求與另一個請求是無法區分的。您必須在新端口上創建一個新的Web服務器,然後在其他端口上連接其中一個連接,或者使用單獨的socket.io命名空間,如在一個socket.io服務器上建議的woodsy。 – jfriend00

回答

1

Socket.io NAMESPACES

userType1.js:

module.exports = function (io) { 
    var nsp = io.of('/userType1'); 
    nsp.on("connection", function (socket) { 
     console.log("Connected to userType1"); 
    }); 
} 

userType2.js

module.exports = function (io) { 
    var nsp = io.of('/userType2'); 
    nsp.on("connection", function (socket) { 
     console.log("Connected to userType2"); 
    }); 
} 

userTypeALLUSERS:

module.exports = function (io) { 
    io.on("connection", function (socket) { 
     console.log("Connected to ALL USERS"); 
    }); 
} 

客戶端側(usertype2) :

var socket = io('/userType2'); 

服務器控制檯:

已連接到userType2

連接到所有的用戶