2011-11-02 56 views
5

我已经使用.NET 4.0和套接字使用hybi-17规范构建了一个WebSocket聊天服务器。如果浏览器连接到端口81上的聊天服务器,则所有功能都应如其所示。然而,由于公司的防火墙等 - 我需要浏览器连接到80端口,因为这需要世界上每台PC都可以访问。在IIS 7反向代理背后的Websocket服务器

所以我使用IIS 7 as a reverse proxy。我设法让浏览器连接到IIS 7上的ws://localhost/chatProxy,IIS 7然后代理请求到http://localhost:81/chatProxy websocket服务器正在侦听。

Websocket服务器执行握手并为连接创建套接字,然后返回到侦听状态。

问题是,在客户端,websocket“onopen”事件从未触发。就好像IIS不会将请求发送回浏览器一样。

任何帮助将不胜感激!

在此先感谢!

回答

7

这是因为IIS 7不知道websocket并且无法代理它。然而,它会将最初的请求转发给你的websockets服务器,因为对websocket服务器的初始请求是一个标准的HTTP请求(带有一些额外的头文件)。 IIS将知道这一点,并简单地转发请求。但是,一旦接收到websocket请求,websocket服务器将发送101响应并切换到websocket模式。 IIS将无法理解WebSocket流量,并且无法代理该流量。

IIS 8将本机支持websockets(支持将包含在.NET 4.5中),并且希望微软也将增加对反向代理websocket流量的支持。

+0

啊!回到绘图板 :) –

相关问题