2017-03-31 179 views
0

有沒有一個websocket的node.js框架,我可以在websockets服務器路徑中指定一個通配符?Node.js和帶有通配符的WebSocket在url路徑中

我想使用的路徑,像這樣

/一些/:ID

在這種情況下,應該能夠連接到符合上述字符串的URL。服務器可以訪問該ID並可以提供不同的頻道。

例如:當使用模塊「WS」一個可以設置爲一個特定的路徑的WebSocket服務器的HTTP服務器上:

new WebSocket.Server({server: someHttpServer, path:'/some/path'}) 

從這裏,你可以從瀏覽器連接到您的WebSocket服務器一個WebSocket的對象:

let client = new WebSocket('ws://.../some/path') 

我所尋找的是這樣的事情

new WebSocket.Server({server: someHttpServer, path:'/some/:id'}) 

這樣我就可以連接到WebSocket的一個提供預定義的ID

let clientA = new WebSocket('ws://.../some/idA') 
let clientB = new WebSocket('ws://.../some/idB') 
+0

我不知道我理解你的問題,但明確允許你使用通配符服務不同的'路線',幾乎相同的語法,你建議 –

+0

我編輯的問題更具體。 – Stefan

回答

0

由於沒有答案,我認爲實際上有沒有。

我發現了Websocket.Server類中的shouldHandle方法負責決定請求的websocket路徑。這很容易被覆蓋,像這樣:

WebSocketServer.prototype.shouldHandle = function shouldHandle(req) { 
// Add your own logic and return `true` or `false` accordingly. 
}; 

爲了做我想做的事你可以實現以下(對於性能與沒有優化)

... 
    let customShouldHandle (req) { 
    const pattern = new require('url-patter')('/some/:key/path') 
    const url = require('url').parse(req.url).pathname 
    const match = pattern.match(url) 

    if (!match) { 
     return false 
    } 

    if (!req.params) { 
     req.params = {} 
    } 
    req.params.key = match.key 
    return true 
    } 

    ... 
    let server = new WebSocket.Server({ 
    server: httpServer, 
    path: this.customShouldHandle 
    }) 
    ...