2017-04-17 32 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

连接到所有的用户