不在端口 80 中托管的 websocket 服务器将从 Internet 浏览器中不可见?
我不能使用端口 80(IIS 正在使用它),443 和 8080 都不能。
托管在自定义端口上的 websocket 是否会出现防火墙问题?
唯一的办法是使用IIS8作为共享同一个端口(80)?(我正在使用带有 SuperWebSocket 库的 IIS7)
从浏览器访问的 Websocket 不应该部署在自定义端口中吗?
提前致谢。
根据这里:
警告:服务器可以侦听它选择的任何端口,但如果它选择 80 或 443 以外的任何端口,它可能会遇到防火墙和/或代理问题。端口 443 上的连接往往会更频繁地成功,但当然,这需要安全连接 (TLS/SSL)。另外,请注意大多数浏览器(尤其是 Firefox 8+)不允许从安全页面连接到不安全的 WebSocket 服务器。
为了解决您问题的核心,我非常成功地意识到我的 Web 服务器和 Web Socket 服务器都可以在端口 80 上,但是不同的主机( origins )。只要 Web Socket 服务器可以处理来自您的网页源的 CORS 请求,这似乎是一种避免防火墙问题并导致来自 Web 服务器的静态内容和来自 WebSocket 服务器的动态内容的架构。
所以故事是:
从 web.server.com:80 提供页面(这是原点)
在该网页上的应用程序空间中打开一个 WebSocket 到 websocket.server.com:80/serviceName
(发出需要被 websocket.server.com 允许的跨域请求,这可能会将 web.server.com 列入白名单)
愉快地分别提供动态内容和静态内容。
对您的一些问题的一些更具体的答案:
不在端口 80 中托管的 WebSocket 服务器将从 Internet 浏览器中不可见?
否。如果需要,您在浏览器中的应用程序可以打开一个 WebSocket 到其他端口,但受 CORS 约束。通常将 WebSocket 保留在端口 80 上是有利的,这样中介和边缘网关就不必更改防火墙规则。
我不能使用端口 80(IIS 正在使用它),既不是 443 也不是 8080。托管在自定义端口上的 WebSocket 是否会出现防火墙问题?
最有可能的是,除非您可以控制防火墙并且可以打开其他端口。
如果您可以控制防火墙,那么在自定义端口上运行 websocket 服务器就没有问题。您只需要打开端口以允许传入流量到该端口。
问题不是真正的防火墙本身,而是在流量到达您的服务器之前发生的其他类型的过滤、代理、负载平衡等。但是,除非您有未提及的特定要求,否则简单地允许该端口上的流量应该没有问题。
如果您的 WebSocket 服务器配置为将连接限制到特定来源 (CORS),那么您将需要允许来源建立连接。源是 Web 服务器的地址,它将为发出 WebSocket 请求的网页提供服务。默认值通常要么完全开放,要么仅限于 websocket 服务器本身的地址。