2017-03-31 176 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 
    }) 
    ...