我需要创建一个用户对用户的实时聊天系统。我设法为聊天创建了一个简单的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长轮询。
您的问题中有某些假设,这些假设根本不是真的。
我也必须购买SSL证书
你吗?据我所知,有免费的证书发行者,例如letsencrypt
。这里的问题可能是您正在使用仅FTP访问的共享主机。考虑从某个云提供商处获得VPS,例如DigitalOcean
。您将拥有在那里的虚拟环境的完全访问权限。而且大多数最便宜的VPS都以相同的价格提供共享主机。
Facebook在切换到套接字之前使用XHR长轮询
是的,他们曾经是,有时也回到他们身上。但是,首先-它们具有很大的计算能力。他们负担得起这些东西。其次,facebook网络聊天不是我用过的最快的应用程序:)
-
具有索引列和普通MySQL单个实例上的一些记录,您不会注意到任何速度下降。当数据增长并且用户(同时连接)增长时,您将逐渐发现您需要优化内容,最终有一天您将最终获得WebSocket的青睐。
PHP本质上并不意味着是异步的。所有异步事件以及整个事件循环,您都需要自己完成或组合几个框架来进行拯救。
我通常会建议使用异步运行时的完整专有WebSocket实现。您可以在Ratchet
中查看PHP
,或在ws
中使用Node.js
。