我正在创建PHP,基于ajax的实时聊天系统,我正面临着关于消息状态的问题,假设用户A是否向用户B发送消息,那么此消息需要向用户,用户A和用户显示乙
我使用状态显示未读消息0,在聊天窗口显示消息,但它只显示给一个用户而不是其他用户,因为每2秒后将间隔更新状态设置为1。
我的想法是为用户A使用两个不同的状态,为用户B使用一个。 这是正确的方法还是可以采用另一种方式来做到这一点?
请提供建议。
答案 0 :(得分:1)
在我的旧项目中,我总是每三(3)秒运行一次脚本。它提交最新消息的最后一个ID,脚本检查是否有一个ID高于当前对话的最新消息ID,如果是,它将加载这些消息。
一个简单的例子是:
<div id="message-div">
<div id="49" class="mes">User 1: What's up?</div>
<div id="50" class="mes">User 2: Okay. How about you?</div>
<div id="51" class="mes">User 1: Pretty fine.</div>
</div>
我的脚本将每隔三(3)秒运行一次,并使用Ajax提交最新的ID(上面的示例为51 )。它会检查是否有高于51的ID,然后将append()
更改为#message-div
。
只需确保在添加新邮件时,它就会包含该邮件的ID。
var new-message = '<div id="52" class="mes">User 2: That is good to hear.</div>'; /* THIS COMES FROM AN AJAX REQUEST */
$("#message-div").append(new-message);
我没有使用status
列或任何其他内容。我为read
功能所做的是有一个额外的表来存储用户阅读邮件的日期和时间。
read_id | message_id | user_id | read_date
---------+------------+---------+---------------------
1 | 51 | 2 | 2016-06-03 14:29:30 /* USER 2 READ MESSAGE 51 IN JUNE 3, 2016 AT 2:26 PM */
2 | 52 | 1 | 2016-06-03 14:30:10