Php知道用户是否已阅读所发送的消息并获取所有未读消息

时间:2017-10-15 08:07:42

标签: javascript php mysql

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

以下是我的数据库结构

tbl_messages

id
message
sent_by
sent_on

该关系的另一个表,在用户删除仅删除其关系的消息

时非常有用

tbl_message_users

message_id
user_id
read // 0 or 1 

对于要向其发送邮件的用户,read默认为0(未读取)。

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

对于如何实现未读消息不确定。假设用户处于离线状态,我希望他能够收到有关read=0消息的未读消息的通知。

假设用户已登录但尚未打开聊天框,该聊天框也会成为未读消息。

我该怎么做?

1 个答案:

答案 0 :(得分:-2)

对不起男孩,但我不明白你在哪里发现问题...这很简单

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

当用户登录聊天服务时您需要在“tbl_messages_users”中使用param“read = 0”进行查询。然后你必须设置数据库输出的样式

/** 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:在线用户(Client-Sider)

/** I'm using jQuery syntax **/

/**
* %HTTP_METHOD%                   :    GET or POST ?
* %SERVER_SIDE_URL%               :    Where is the action?
* %DATA_TO_SERVER_SIDE_ACTION%    :    Example ClientID
*
* We use JSON Data Object because is really simple to parse in jQuery
**/
$.ajax({
    type: "%HTTP_METHOD%",
    url: "%SERVER_SIDE_URL%",
    data: "%DATA_TO_SERVER_SIDE_ACTION%"
}).done(function(json) {
    /** indexOf prevent invalid HTML characters **/
    json = json.substring(json.indexOf("{")); 
    json = $.parseJSON(json);

    /** Create Your JSON Data Structure, iterate It and generate HTML to append in notification panel **/

}).fail(function(httpResponse) {
   /** 
   * Stylish an HTML exception 
   * httpResponse    :    Contains Server HTTP response data (Ex. response code like 200, ..., 500) 
   **/
});

如何调用Ajax请求?

setTimeout(function() {
   myAjaxRequest( ...params ):
}, %EVERY_X_MILLISECONDS%);

或使用TRIGGER

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

function myCallbackFunction(e) {
    myAjaxRequest( ...params ):
}
  

如何使用技巧?当用户调用服务器API(客户端)时

将案例1与案例2合并

在%SERVER_SIDE_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触发器! =)