- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的共享主机上运行一个基本的聊天应用程序。
我会使用 PHP Websockets 实现库,Ratchet .
但是,当我转到我的共享主机 (Hostgator) websockets 信息页面时,它指出:
PHP Socket Support? If you are connecting out, it should work. We do not allow clients to bind to local ports for incoming.
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8081
);
$server->run();
最佳答案
主要答案
共享主机通常允许您在高端口上收听,例如您正在使用的那个。但是,在实践中会遇到一些问题。
首先,Web 服务器可能只允许 80 (HTTP) 和 443 (HTTPS) 入站,因此 8081 端口将被防火墙阻止。您的 PHP 监听器将附加到端口,但会耐心等待永远不会到来的流量。
其次,一些共享主机前面会有一个负载均衡器,它们可能只配置为转发 HTTP 流量。由于 Web Sockets 是一种不同的协议(protocol),因此它们不会被设置为转发该协议(protocol)。与端口相同的问题在这里也重复 - 非标准端口不会被转发。
要解决这些问题,您需要自己的 Web 服务器,您可以在其中以任何您喜欢的方式打开端口(并设置负载均衡器)。这些天这样做很便宜 - 每月几杯咖啡的价格,您可以租用小型虚拟服务器。它没有共享服务器那么多的 RAM,但它会更加灵活。
设计问题
我还要提请注意使用 Web 套接字的非标准端口来为标准 80/443 端口上的 Web 应用程序提供服务。这并不总是一个好主意。非标准端口可以在台式机和标准家庭互联网连接上正常工作,但对于某些办公室或移动互联网连接,您可能会陷入困境。
最好在您的应用程序前面放置一个负载均衡器,然后让它根据协议(protocol)签名路由流量(Web Socket 或 HTTP)。这将允许您在每个端口使用多个协议(protocol)。如果你有兴趣探索这个,我推荐 Traefik 和 Docker 容器——我已经设置好了,它确实运行得很好。
关于php - 共享主机上的 Websockets : not possible because of shared hosting itself or because of non-php integrations?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55964583/
我是一名优秀的程序员,十分优秀!