我正在尝试为我的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。但我需要一个房间为每个客户端会话上传,我怎么做?
编辑:我谷歌了一下,但是什么也没找到。
通常,您将只创建一个服务器,并且所有客户机将连接到该服务器。客户端可以通过使用连接URL上的查询参数来指定他们想要连接的房间,也可以在连接后向服务器发送消息,指定他们想要加入的房间。然后,您可以跟踪服务器上哪个房间的套接字,以便您的服务器可以对这些房间实现任何您想要的功能(例如向房间"xxx"中的每个人发送消息或向房间"xxx"中的所有其他用户发送消息)。
创建多个服务器的唯一方法是每个服务器都有自己的端口,但是客户机必须知道要连接到哪个端口,并且您必须实现CORS,以便浏览器允许连接。为每个单独的连接使用唯一的服务器会很快变得混乱,通常不需要。