在聊天系统中由两个用户读取消息状态

时间:2016-06-03 05:48:32

标签: php jquery mysql chat

我正在创建PHP,基于ajax的实时聊天系统,我正面临着关于消息状态的问题,假设用户A是否向用户B发送消息,那么此消息需要向用户,用户A和用户显示乙

我使用状态显示未读消息0,在聊天窗口显示消息,但它只显示给一个用户而不是其他用户,因为每2秒后将间隔更新状态设置为1。

我的想法是为用户A使用两个不同的状态,为用户B使用一个。 这是正确的方法还是可以采用另一种方式来做到这一点?

请提供建议。

1 个答案:

答案 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