使用System.Net.WebSockets处理多个子协议

使用HttpListener和System.Net.WebSockets支持多个子协议的WebSockets服务器的正确方法是什么?

我正在使用HttpListener创build一个HttpListenerContext 。 在接收IsWebSocketRequest的请求时,代码AcceptWebSocketAsync协议名称作为参数调用AcceptWebSocketAsync

如果客户端请求是针对不同的子协议,则会引发exception,这是可以预料的。

没有AcceptWebSocketAsync()接受子协议列表的版本,如果我用不同的子协议对AcceptWebSocketAsync()进行两个asynchronous调用,只有后者才有效。

3月14日编辑

为了澄清,我在寻找对Sec-WebSocket-Protocol头的支持,以便框架接受一个websockets升级,基于find客户请求和服务器所支持的通用子协议,然后告诉调用代码在某种程度上哪个(单个)子协议已经得到认可。 (例如,在libwebsockets中 ,您为每个子协议提供一个callback。)

您可以访问具有Request属性的HttplistnerContext 。 它返回一个HttplistnerRequest实例,该实例又具有Headers属性。 Headers返回一个名称/值对的集合。 你应该找到Sec-WebSocket-Protocol头。

现在你有一个客户端请求的子协议列表。 您还知道服务器知道哪些子协议,以便轻松执行匹配。

不过,说实话我没有尝试这种方法,我知道这不是一个简单的解决方案。