0

这可能吗?我们能否访问 http.sys 使用的底层套接字来为给定请求提供响应。我希望能够通过端口 80 上的 http 协议支持全双工通信。

有没有办法为当前请求获取已建立的套接字,并保留它以进行全双工通信?

我的用例是网络套接字。web socket的握手实际上是一个有效的http请求,我想重用我的web服务器来升级它。另一个端口可能未在客户端计算机上打开,因此端口 80 至关重要。

任何替代品都值得赞赏。

4

1 回答 1

0

使用 http.sys,您无法访问底层套接字。您可以处理 http 请求并根据片段(来自片段缓存、内存或文件)构建响应。如果您需要完全控制所使用的套接字(从 http 请求开始,稍后在不支持“secret-websocket-handshake”后将其升级为 websocket 套接字。

你可以做的是:使用火箭般的全双工系统。客户端使用 HTTP 1.1 保持活动套接字发布请求,当 http.sys 服务器收到这些请求时,您可以推迟响应,直到服务器对客户端触发的数据可用或发生超时。这不像 websocket 那样健壮,但性能相当不错,并且只增加了服务器反应时间一到两毫秒(至少在我的测试中)。唯一的问题是当某人在浏览器中向服务器打开多个页面并且浏览器开始让这些页面共享一个 http 请求时。为此,我们将最大轮询保持在尽可能低的水平,从而产生更多的网络流量。

另一种选择是自己在“socket-code”中进行websocket,并使用“http.sys-code”进行http请求。这也可以很好地工作,但会使代码更加复杂。

于 2011-11-17T21:35:49.403 回答