websocket服务器expressjs中的动态路由

时间:2016-09-25 14:52:14

标签: node.js websocket

我试图为我的websocket服务器创建一个动态创建的空间。我的文件服务器需要告诉客户端他们上传的文件的信息,比如处理进度和类似的东西。这是我的观点:

export function myView(req, res) {

  let file = req.file;
  let socketpath = ('/sockets/' + socketid + '/') // A randomly generated id
  let wss = new WebSocketServer({port: 3030, path: socketpath});

  ...
}

这只能运作一次。一旦我尝试将另一个文件发送到服务器,我就会收到此错误:

Error: listen EADDRINUSE 0.0.0.0:3030
    at Object.exports._errnoException (util.js:873:11)
    at exports._exceptionWithHostPort (util.js:896:20)
    at Server._listen2 (net.js:1250:14)
    at listen (net.js:1286:10)
    at net.js:1395:9
    at nextTickCallbackWith3Args (node.js:453:9)
    at process._tickDomainCallback (node.js:400:17)

显然这是因为我在同一个端口创建了另一个wss。但是我需要为每个客户端会话上传提供一个空间,我该怎么做呢?

编辑:我确实谷歌了,但没有找到任何东西。

1 个答案:

答案 0 :(得分:2)

通常,您只创建一个服务器,所有客户端都将连接到该服务器。客户端可以通过在连接URL上使用查询参数或通过在连接指定他们想要加入的房间之后向服务器发送消息来指定他们想要连接的房间。然后,您将跟踪哪个插槽位于您的服务器上哪个房间,以便您的服务器可以实现您想要的那些房间的任何功能(例如向房间中的每个人发送消息" xxx"或发送消息对于房间里的所有其他用户" xxx")。

创建多个服务器的唯一方法是让每个服务器都在自己的端口上,但是客户端必须知道要连接到哪个端口,并且您必须实现CORS,以便浏览器允许连接。每个单独连接的唯一服务器实时快速混乱,通常不需要。