我想在共享主机上运行基本的聊天应用程序。 我将使用PHP Websockets实现库Ratchet。
但是,当我转到共享主机(Hostgator)Websockets信息页面时,它显示:
PHP套接字支持吗? 如果您要连接,它应该可以工作。我们不允许客户端绑定到本地端口以进行传入。
是什么意思?我可以通过ssh创建运行命令的自己的websocket吗?我将使用此基本代码来运行它。
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8081
);
$server->run();
我注意到存在类似的问题,但是大多数答案都说这是不可能的,因为发问者试图使用Node.js或Python Websockets库,大多数共享主机均不支持这些库。
答案 0 :(得分:1)
共享主机通常可以让您在较高的端口上进行监听,例如您正在使用的那个。但是,实践中会出现许多问题。
首先,Web服务器可能仅允许80(HTTP)和443(HTTPS)入站,因此8081端口将被防火墙阻止。您的PHP侦听器将连接到端口,但会耐心等待从未出现的流量。
第二,某些共享主机将在其前面具有负载平衡器,并且它们可能仅被配置为转发HTTP通信。由于Web套接字是一个不同的协议,因此不会设置它们来转发它。端口也会重复出现相同的问题-非标准端口将不会转发。
要解决这些问题,您需要自己的Web服务器,您可以在其中以任意方式打开端口(并设置负载平衡器)。这几天做起来相当便宜-每月只需花费几杯咖啡的价格,您就可以租用一台小型虚拟服务器。它没有共享服务器那么多的RAM,但是它将更加灵活。
我还将提请注意将非标准端口用于Web套接字,以在标准80/443端口上为Web应用程序提供服务。这并不总是一个好主意。非标准端口可以在台式机和标准家庭Internet连接上正常工作,但是对于某些办公室或移动Internet连接,您可能会感到很烦。
最好将负载平衡器放在应用程序的前面,然后让它根据协议签名路由流量(Web套接字或HTTP)。这将允许您在每个端口上使用多种协议。如果您有兴趣探索这个问题,我建议您将Traefik与Docker容器配合使用-我已经进行了设置,并且效果确实很好。