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