Javascript Php知道用户是否已经阅读了发送的消息,并获得了所有未读消息
我与web套接字进行实时聊天,并将消息存储在MySQL数据库中 下面是我的数据库结构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(未读取) 现
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触发器!!=)