聊天应用程序的XHR长轮询(而不是套接字)?

问题描述 投票:0回答:1

我需要创建一个用户对用户的实时聊天系统。我设法为聊天创建了一个简单的AJAX / PHP / MySQL脚本,但是在PHP / MySQL部分中让我担心的是:

while(true) {
    // ...SELECT * FROM messages ORDER BY date DESC LIMIT 1...

    if($row['date'] > $_POST['last']) {
        echo json_encode($row);

        break;
    }

    sleep(1);
}

不是这意味着它将每1秒SELECT表一次,并且不会使服务器超负荷吗?


我试图使用PHP套接字,但这是一场噩梦。我还必须购买SSL证书,而且服务器在许多用户的测试中都崩溃了,因此我决定暂时使用长拉系统。如果我没记错的话,Facebook在切换到套接字之前(如果根本没有切换)使用XHR长轮询。

php mysql ajax long-polling
1个回答
0
投票
嗯,您的问题太笼统了。尽管它主要取决于您将要接收的负载和服务器的详细信息,但通常不建议使用长时间轮询。

您的问题中有某些假设,这些假设根本不是真的。

我也必须购买SSL证书

你吗?据我所知,有免费的证书发行者,例如letsencrypt。这里的问题可能是您正在使用仅FTP访问的共享主机。考虑从某个云提供商处获得VPS,例如DigitalOcean。您将拥有在那里的虚拟环境的完全访问权限。而且大多数最便宜的VPS都以相同的价格提供共享主机。

Facebook在切换到套接字之前使用XHR长轮询

是的,他们曾经是,有时也回到他们身上。但是,首先-它们具有很大的计算能力。他们负担得起这些东西。其次,facebook网络聊天不是我用过的最快的应用程序:)

-

具有索引列和普通MySQL单个实例上的一些记录,您不会注意到任何速度下降。当数据增长并且用户(同时连接)增长时,您将逐渐发现您需要优化内容,最终有一天您将最终获得WebSocket的青睐。

PHP本质上并不意味着是异步的。所有异步事件以及整个事件循环,您都需要自己完成或组合几个框架来进行拯救。

我通常会建议使用异步运行时的完整专有WebSocket实现。您可以在Ratchet中查看PHP,或在ws中使用Node.js

© www.soinside.com 2019 - 2024. All rights reserved.