共享主机上的Websockets:由于共享主机本身或非PHP集成而无法实现吗?

时间:2019-05-03 06:47:14

标签: php websocket

我想在共享主机上运行基本的聊天应用程序。 我将使用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库,大多数共享主机均不支持这些库。

1 个答案:

答案 0 :(得分:1)

主要答案

共享主机通常可以让您在较高的端口上进行监听,例如您正在使用的那个。但是,实践中会出现许多问题。

首先,Web服务器可能仅允许80(HTTP)和443(HTTPS)入站,因此8081端口将被防火墙阻止。您的PHP侦听器将连接到端口,但会耐心等待从未出现的流量。

第二,某些共享主机将在其前面具有负载平衡器,并且它们可能仅被配置为转发HTTP通信。由于Web套接字是一个不同的协议,因此不会设置它们来转发它。端口也会重复出现相同的问题-非标准端口将不会转发。

要解决这些问题,您需要自己的Web服务器,您可以在其中以任意方式打开端口(并设置负载平衡器)。这几天做起来相当便宜-每月只需花费几杯咖啡的价格,您就可以租用一台小型虚拟服务器。它没有共享服务器那么多的RAM,但是它将更加灵活。

设计问题

我还将提请注意将非标准端口用于Web套接字,以在标准80/443端口上为Web应用程序提供服务。这并不总是一个好主意。非标准端口可以在台式机和标准家庭Internet连接上正常工作,但是对于某些办公室或移动Internet连接,您可能会感到很烦。

最好将负载平衡器放在应用程序的前面,然后让它根据协议签名路由流量(Web套接字或HTTP)。这将允许您在每个端口上使用多种协议。如果您有兴趣探索这个问题,我建议您将Traefik与Docker容器配合使用-我已经进行了设置,并且效果确实很好。