亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

php+mysql做后臺(tái),怎么實(shí)現(xiàn)用戶登陸,推送消息
阿神
阿神 2017-04-10 15:43:58
0
8
1091

大概情況是這樣的:
當(dāng)A登陸以后,可以發(fā)消息給B,如下圖,選擇B的工號(hào)

發(fā)送以后,B登陸,可以在部門消息那里會(huì)顯示一個(gè)小紅點(diǎn),提示有消息

我的思路是這樣的:當(dāng)A按下發(fā)送以后,就向存放消息的數(shù)據(jù)庫(kù)里寫一條記錄,并把消息的狀態(tài)碼設(shè)置成未讀,接收人是B,當(dāng)B登陸以后,因?yàn)闋顟B(tài)碼是未讀,就會(huì)顯示提示信息??墒沁@個(gè)提示怎么實(shí)現(xiàn)?

這是我消息的數(shù)據(jù)庫(kù):

如果我一次發(fā)同樣的消息給多個(gè)人,是不是應(yīng)該寫多條記錄?向數(shù)據(jù)庫(kù)寫消息要循環(huán)?
還有一個(gè)問(wèn)題是:如果我的消息中包含圖片,圖片是不是要放在一個(gè)文件夾里?
希望能給點(diǎn)意見,謝謝!

阿神
阿神

閉關(guān)修行中......

reply all(8)
大家講道理

你確定只是在用戶登錄時(shí)看到消息就可以了是吧。如果是,那接著往下看。

1. 如何進(jìn)行消息提示

在你的表里,message_id應(yīng)該是這個(gè)表的主鍵,每個(gè)消息都對(duì)應(yīng)著一個(gè)message_id。當(dāng)某用戶登錄時(shí),就查詢這個(gè)message表里的receive_id和message_status,即查詢登錄的用戶中未讀消息的個(gè)數(shù),若個(gè)數(shù)>0,表示有未讀消息,登錄成功跳轉(zhuǎn)時(shí),有一個(gè)mes_status的字段也同時(shí)傳過(guò)去。比如跳轉(zhuǎn)到首頁(yè)(index),index中再判斷mes_status的值,給用戶以提示。

2. 若發(fā)送給多人呢

其實(shí)你的message表里的主鍵是message_id,跟發(fā)送給幾個(gè)人沒(méi)什么關(guān)系,當(dāng)他登錄時(shí),只查詢這個(gè)用戶自己作為接收方,收到的消息的個(gè)數(shù)。比如數(shù)據(jù)表里有這樣的一些數(shù)據(jù):

message_id send_id message_date message_title message_content receive_id message_status
1 111 2015-06-25 13:00:00 hello hello world 222 1
2 111 2015-06-25 14:00:00 may 中國(guó),你好 333 1
3 444 2015-06-26 11:00:00 wenzi wenzi 222 1
4 666 2015-06-26 16:00:00 hello hello world 222 1

用戶111可以給多個(gè)用戶222, 333發(fā)送消息,并不沖突;用戶也能接收多個(gè)其他用戶的消息,比如222。當(dāng)用戶(userid=='222')登錄時(shí),就查詢(receive_id==userid)的消息即可。

3. 若消息中有圖片怎么辦

你的推斷是對(duì)的,首先應(yīng)該把用戶上傳的圖片放到一個(gè)文件件中,然后返回給用戶一個(gè)圖片鏈接,用戶把這個(gè)圖片鏈接插入到消息中。

左手右手慢動(dòng)作

這個(gè)要用到推送。
說(shuō)實(shí)話。PHP不適合做推送。要用到ajax輪詢。這樣的話效率不高,還容易出問(wèn)題。
這里已經(jīng)有很不錯(cuò)的解決方案了。
http://segmentfault.com/q/1010000000589829/a-1020000000591493

巴扎黑

發(fā)送消息 都可以直接寫db 附件當(dāng)然是得有個(gè)靜態(tài)文件服務(wù)器進(jìn)行上傳生成url 也方便以后的擴(kuò)展;
至于推送到瀏覽器,客戶端 就必須用長(zhǎng)連接(推薦),websocket(推薦)或者ajax輪詢方式去實(shí)現(xiàn). 監(jiān)聽狀態(tài)變化接口

劉奇

消息接收方的字段可以存儲(chǔ) 1,2,3,4 這樣發(fā)送多人就不需要寫入多條數(shù)據(jù)了

登錄時(shí)候去查詢消息推送表是否有未讀消息

如果需要在線 提示就需要做前端ajax輪詢咯

巴扎黑

實(shí)時(shí)性要求不高的話,前端可以每5分鐘AJAX輪詢一次消息表。

如果要插入多條記錄的話,建議開啟事務(wù),循環(huán)插入,提交事務(wù),能加快插入速度。

不想插入多條記錄的話,可以像 @飯盒 說(shuō)的那樣,消息接收方的字段receive_id保存接收人的ID序列(1,2,3,4),消息狀態(tài)字段message_status保存未閱讀消息的接收人ID序列(2,3),message_status初始值為(1,2,3,4),已查看消息的用戶ID則從其中刪除??梢杂肕ySQL內(nèi)部函數(shù)FIND_IN_SET(返回找到的位置,從1開始)進(jìn)行查詢,比如:

$user_id = 2;
$sql = <<<heredoc
SELECT * FROM `message` 
WHERE FIND_IN_SET('{$user_id}', `message_status`) 
AND   FIND_IN_SET('{$user_id}', `receive_id`);
heredoc;

數(shù)據(jù)量比較大的話,F(xiàn)IND_IN_SET可能會(huì)存在性能問(wèn)題,建議定時(shí)清理message表過(guò)期的消息。

伊謝爾倫

可以用 workerman 做

黃舟

你有沒(méi)有這個(gè)消息提示的例子 可以發(fā)一下嗎 QQ 784226527

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template