这可能吗?我们可以访问底层套接字,http.sys使用它来为给定请求提供响应。我希望能够通过端口80上的http协议支持全双工通信。
有没有办法为当前请求获取已建立的套接字,并保留它以进行全双工通信?
我的用例是网络套接字。 Web套接字的握手实际上是一个有效的http请求,我想重用我的Web服务器进行升级。可能无法在客户端计算机上打开另一个端口,因此端口80至关重要。
任何替代方案都表示赞赏。
答案 0 :(得分:0)
使用http.sys,您无权访问底层套接字。您可以处理http请求并根据片段(来自片段缓存,内存或文件)构建响应。如果您需要完全控制所使用的套接字(作为http请求启动,稍后在不支持“secret-websocket-handshake”之后将其升级到websocket套接字。
你可以做的是:像全双工系统一样使用火箭。客户端使用HTTP 1.1保留活动套接字发布请求,当http.sys服务器收到这些请求时,您可以推迟答案,直到服务器到客户端触发的数据可用或发生超时。这不像websocket那样健壮,但性能相当好,只能在服务器响应时间增加一到两毫秒(至少在我的测试中)。当有人在浏览器中打开多个页面到服务器并且浏览器开始让页面共享单个http请求时,会出现唯一的问题。为此,我们保持最大轮询尽可能低,从而产生更多的Web流量。
另一种选择是在“socket-code”中使用websocket,使用“http.sys-code”进行http请求。这也很合理,但使代码更复杂。