所以我一直试图设置棘轮一段时间。并且遇到了另一个障碍。我已经按照本教程http://socketo.me/docs/hello-world进行操作,一切似乎都适用于本地计算机。但是当我尝试从远程机器访问它们以进行测试时我不能。在帮助和故障排除部分下,它声明将聊天服务器程序绑定到0.0.0.0,我这样做无济于事。目前我在端口9680上运行它,因为80和8080在系统上使用。 (运行Apache服务器)任何有关如何解决此连接问题的帮助或建议将非常感激,因为我无法继续我的项目,直到我可以远程访问Websockets。我对服务器管理还比较陌生,所以我对如何设置它的知识相当渺茫。提前谢谢!
答案 0 :(得分:2)
您实际上不应该将WebSocket服务器绑定到生产中的0.0.0.0。在服务器环境中,0.0.0.0表示" 本地计算机上的所有IPv4地址"。所以说你的服务器的公共IP地址是1.1.1.1,本地/私有IP地址是192.168.0.1,这意味着绑定到0.0.0.0的应用程序可以从两个IP到达(至少可以到达任何一个IP)路由到这些地址)。通常,在生产设置中,这不是您想要的。通常,您希望绑定到特定网络接口上的特定IP地址,因为您确切知道主机将要侦听的内容。
您想要注意的其他问题是,绑定到公共接口通常需要root权限。尝试在没有提升权限的情况下执行此操作通常会导致打开TCP套接字时出错。还有地址已在使用问题,这可以通过确保在socketopt上设置SO_REUSEADDR
来解决(虽然,我' m相当肯定Ratchet默认为你做这个)。此外,如果您正在运行SELinux,那么您的政策始终可能无法收听该端口。然后是防火墙网络配置问题,防火墙或网络硬件的某些部分阻塞了端口。
另一个退回到拥有多租户服务器,如果你想从Apache httpd网络服务器和PHP WebSocket服务器提供HTTP流量,你就不能将它们绑定到同一个端口在相同的IP上,而不在他们面前放置反向代理。实际上,这就是他们文档中的Ratchet recommends for production。
一般的想法是将reverse proxy like HAProxy绑定到端口80/443上的公共IP侦听,然后将其路由特定的流量配置到PHP WebSocket服务器(可能会在本地侦听例如,取决于具体的路由集或某些cookie,您的Apache httpd网络服务器可以是回送或本地网络接口。