Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Php知道用户是否已经阅读了发送的消息,并获得了所有未读消息_Javascript_Php_Mysql - Fatal编程技术网

Javascript Php知道用户是否已经阅读了发送的消息,并获得了所有未读消息

Javascript Php知道用户是否已经阅读了发送的消息,并获得了所有未读消息,javascript,php,mysql,Javascript,Php,Mysql,我与web套接字进行实时聊天,并将消息存储在MySQL数据库中 下面是我的数据库结构 tbl\u消息: id message sent_by sent_on message_id user_id read // 0 or 1 关系的另一个表,在用户删除消息以仅删除其关系时非常有用 tbl\u消息用户: id message sent_by sent_on message_id user_id read // 0 or 1 对于要向其发送消息的用户,上面的read默认为0(未读取) 现

我与web套接字进行实时聊天,并将消息存储在MySQL数据库中

下面是我的数据库结构

tbl\u消息

id
message
sent_by
sent_on
message_id
user_id
read // 0 or 1 
关系的另一个表,在用户删除消息以仅删除其关系时非常有用

tbl\u消息用户

id
message
sent_by
sent_on
message_id
user_id
read // 0 or 1 
对于要向其发送消息的用户,上面的
read
默认为0(未读取)

现在,在我的web套接字中,用户单击发送按钮后,nodejs中会触发一个发送消息事件,该事件执行一个函数来再次检索消息以进行更新

我不确定如何实现未读消息。假设用户脱机,我希望他收到未读消息的通知,这些消息是
read=0

假设还有一个用户已登录,但尚未打开聊天框,该聊天框将成为未读消息


我该怎么办呢?

对不起,孩子,我不明白你在哪里发现了问题。。。这真的很简单


案例1:离线用户通知(服务器端)

当用户登录聊天室服务时,您需要使用参数“read=0”在“tbl\u messages\u users”中进行查询。然后您必须对DB的输出进行样式化

/** I'm using PHP syntax because I'm not good with NodeJS **/

$query = new Query(...);
$results = $query->getResults();
if(count($results) > 0) {
    foreach($results as $result) {
        /** .... STYLISH THIS (Ex. in HTML) .... **/
    }
}
如何使用技巧?当服务器为用户生成页面时(服务器端)


案例2:在线用户(客户端)

如何调用Ajax请求

setTimeout(function() {
   myAjaxRequest( ...params ):
}, %EVERY_X_MILLISECONDS%);
或者使用触发器

$(document).on("%MY_TRIGGER%", myCallbackFunction);

function myCallbackFunction(e) {
    myAjaxRequest( ...params ):
}
当用户调用服务器API(客户端)时,如何使用技巧?


结合案例1和案例2

在%SERVER\u SIDE\u URL%(案例2)中,可以放置一个返回JSON数据对象的URL

/** I'm using PHP syntax because I'm not good with NodeJS **/

$query = new Query(...);
$results = $query->getResults();
$RESULT = array();
if(count($results) > 0) {
    $RESULT['status'] = 'OK';
    $RESULT['unreadMessages'] = array();
    foreach($results as $result) {
        $RESULT['unreadMessages'][] = array(
            'message' => $result->message,
            'date' => $result->messageDate,
            /** ... etc **/
        );
    }
} else { 
    $RESULT = array(
        'status' => 'KO',
        'error' => 'No unread messages for user %USER_ID%',
    );
}

echo json_encode($RESULT);
exit; /** PREVENT SCRIPT TO REMAIN ALIVE IN BACKGROUND **/
之后

通过Ajax请求调用服务器页面(参见案例2)


结论 当用户登录聊天系统或用户也登录聊天系统时,您可以使用案例2。只要在需要时启动jQuery触发器!!=)