2016-09-25 64 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,以便瀏覽器允許連接。每個獨立連接的獨特服務器會非常快速地混亂,通常不是必需的。