我正在尝试使用仅 JavaScript,PHP和SQL(确切地说是PostgreSQL)创建聊天框。目前,我必须每隔X秒使用AJAX请求检查新消息。
现在这里有一些问题。最大的一个可能是发送到服务器的请求数量。这种主动连接可能成为带宽杀手。
另一件事是,我们将这些消息保存在我们的数据库中。总是。现在,如果我们检查新消息,我们不希望检查整个消息表以仅获取新消息。这就是我喜欢只找到新消息并将其发送给客户的原因。
我见过Ratchet。似乎非常有趣。不幸的是,现在这不是一个解决方案。我有点想学习这样做,而不是依赖第三方工具。
从我用Google搜索的内容来看,我毕竟需要的不仅仅是这个。如果您对某些事情有任何建议,我很乐意听到。但我现在需要在PHP / SQL / JS组合中使用这个聊天框。
我将如何处理这样的事情?提前谢谢。
答案 0 :(得分:2)
我个人对这些语言的聊天客户端的偏好包括让JavaScript保存上次加载的消息的ID,并在每次调用AJAX时将其传递回PHP脚本。然后PHP可以查询数据库,只请求ID高于给定ID的消息。
当用户首次加载页面时,您可以通过加载最近的十条消息,或者过去五分钟内的消息,或者最适合您的消息来决定如何处理它。
我每隔五秒钟就会对服务器进行一次AJAX查询,即使对于大量用户来说,它的负载也不会太大。
话虽如此,那里有更有效的解决方案,涉及服务器通知客户新消息,但它们要复杂得多!如果你不愿意使用预先制定的解决方案,你应该坚持使用普通的AJAX轮询。
答案 1 :(得分:0)
我要做的是将消息存储在数据库中,并使用PHP插入/检索消息,您可以根据需要使用会话和登录不同用户,并且在前端您应该使用{ {3}}使用jQuery ajax method调用以json或xml回答的PHP方法,以便javascript可以解释此信息。
因此,在您的前端代码中,当用户发送消息(将Enter键绑定到输入)并使用json_encode进行轮询时,您可以执行ajax post请求,或者您可以使用{{ 3}}实现推送系统这将减少带宽,但这需要更好的服务器,并在服务器中配置Cron,以便每当有新消息时进行检查。
关于数据库,您可以确定哪个用户使用该用户IP发送了消息并将其存储在消息表中。