2016-09-25 161 views
0

我正在尝试为我的websocket服务器创建一个动态创建的空间。我的文件服务器需要告诉客户端有关他们上传的文件的信息,例如处理进度和类似的东西。这是我的看法:websocket服务器的动态路由expressjs

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。但是,我需要为每个客户端会话上传留出空间,我该怎么做?

编辑:我没有谷歌这个,但没有找到任何东西。

+0

什么是动态路线,为什么你认为你需要它?您需要描述您尝试解决的实际问题。您不必为每个客户端创建一个单独的webSocket服务器。您可以创建一个所有客户端连接的服务器,通常客户端标识自己(他们是谁),以便一台服务器可以满足他们的所有需求。如果你打算创建多个服务器,那么它们都必须位于不同的端口上,并且你可能必须使用CORS,以便客户端可以访问它们。 – jfriend00

+0

@ jfriend00对不起,我对websockets很陌生。我的意思是说像一个客户可以连接的“房间”。例如:websockets.com/someroom或websockets.com/someroom2 –

+0

让客户端连接到您的一个webSocket服务器,然后发送关于他们想要进入的房间的后续消息。并且,请编辑您的问题以描述这而不是只在评论中。或者,在初始连接时使用查询参数指定房间。 – jfriend00

回答

1

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

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