我与网络套接字进行实时聊天,并在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
消息的未读消息的通知。
假设用户已登录但尚未打开聊天框,该聊天框也会成为未读消息。
我该怎么做?
答案 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触发器! =)