远程棘轮连接

Remote Ratchet Connection

所以我已经尝试设置棘轮有一段时间了。并且遇到了另一个障碍。我已按照本教程 http://socketo.me/docs/hello-world 进行操作,一切似乎都可以在本地计算机上运行。但是,当我出于测试目的尝试从远程计算机访问它们时,我不能。在帮助和故障排除部分下,它声明将聊天服务器程序绑定到 0.0.0.0,但我这样做无济于事。目前我在端口 9680 上有它 运行 因为 80 和 8080 在系统上正在使用。 (这是 运行 一个 apache 服务器)任何关于如何解决此连接问题的帮助或建议将不胜感激,因为在我可以远程访问 Websockets 之前我无法继续我的项目。我对服务器管理还很陌生,所以我对如何设置它的了解相当少。提前致谢!

您实际上不应该在生产环境中将您的 WebSocket 服务器绑定到 0.0.0.0。在服务器上下文中,0.0.0.0 表示“ 本地计算机上的所有 IPv4 地址”。所以假设您的服务器有一个 public IP 地址 1.1.1.1 和一个 local/private IP 地址 192.168.0.1,那么这意味着绑定到 0.0.0.0 的应用程序可以从两个 IP 访问(至少到任何可以路由到这些地址的地方)。通常,在生产设置中,这不是您想要的。通常,您希望绑定到特定网络接口上的特定 IP 地址,因为您确切地知道您的主机将监听什么。

需要注意的常见问题

您要注意的另一个问题是,绑定到 public 接口通常需要 root 权限。在没有提升权限的情况下尝试这样做通常会导致打开 TCP 套接字时出错。还有 address is already in use 问题,可以通过确保在 socketopt 上设置 SO_REUSEADDR 来解决(不过,我相当默认情况下某些 Ratchet 会为您执行此操作)。此外,如果您使用的是 运行 SELinux,则您的策略总是有可能不允许侦听该端口。然后是防火墙网络配置问题,您的防火墙或网络硬件的某些部分阻塞了端口。

Ratchet 和 Apache 在同一个端口上

拥有多租户服务器的另一个缺点是,如果您想同时从 Apache httpd 网络服务器和 PHP WebSocket 服务器提供 HTTP 流量,则不能同时绑定两者到同一 IP 上的同一端口,而无需在它们前面放置反向代理。事实上,这就是 Ratchet recommends for production 在他们的文档中的内容。

一般的想法是有一个 reverse proxy like HAProxy,绑定到侦听端口 80/443 的 public IP,然后配置它将特定流量路由到您的 PHP WebSocket服务器(可能会监听本地环回或本地网络接口)或您的 Apache httpd 网络服务器,具体取决于一组特定的路由或某些 cookie,例如。