java - 即時(shí)通信系統(tǒng)和push推送系統(tǒng)都是怎么實(shí)現(xiàn)的啊?
問題描述
一條消息 如何通過服務(wù)器中轉(zhuǎn)達(dá)到 指定的另一端的
方便的話 貼一段典型的代碼
另外session存儲(chǔ)的時(shí)候 都存儲(chǔ)什么信息啊
問題解答
回答1:我的理解:客戶端每間隔一段時(shí)間(比如一秒)向服務(wù)器進(jìn)行一次請(qǐng)求(發(fā)送request)。如果服務(wù)端存在消息則在響應(yīng)(response)中標(biāo)記信息,通知客戶端服務(wù)器端存在新消息。客戶端向服務(wù)端發(fā)送請(qǐng)求拉去消息,服務(wù)端響應(yīng)。
request:有新消息嗎?收到請(qǐng)回答。response:沒有。request:有新消息嗎?收到請(qǐng)回答。response:沒有。request:有新消息嗎?收到請(qǐng)回答。response:有,消息id是123456。request:請(qǐng)發(fā)送消息id是123456的消息內(nèi)容。response:消息id:123456,消息正文:驚!這個(gè)女人竟然在13億人面前做這種事……。
回答2:消息傳達(dá)是通過客戶端刷新向服務(wù)端獲得消息的而不是服務(wù)端直接向客戶端發(fā)送
以前確實(shí)有一些是直接在本地開端口由服務(wù)器直接請(qǐng)求客戶端的,但現(xiàn)在用于消息推送已經(jīng)不多見了(通常用于局域網(wǎng)內(nèi)傳輸文件或信息)
session存儲(chǔ)在服務(wù)器,本地通過 Cookies 存儲(chǔ) SESSION 的 name 和 id,服務(wù)器通過這兩個(gè)而獲取服務(wù)器端存儲(chǔ)的內(nèi)容
回答3:目前常見的是兩種方案。1、客戶端主動(dòng)輪詢(也就是每隔N時(shí)間向服務(wù)端詢問有沒有消息。2、服務(wù)端主動(dòng)推送。后端服務(wù)之間用socket,與前端通訊的話可以用websocket。
回答4:http2.0 可以很好的處理,可以嘗試一下啊~
回答5:都說是即時(shí)性的了,肯定要建立長連接這種了。比如socket。
回答6:如果只是屬于產(chǎn)品的眾多功能之一,即時(shí)通信推薦題主對(duì)接IM,既可以節(jié)約一大筆開發(fā)支出,現(xiàn)有的IM提供商附帶的功能又比較全面,比自己開發(fā)要?jiǎng)澦愕亩?題主可以看一下環(huán)信 http://www.easemob.com/
相關(guān)文章:
1. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined2. html - 爬蟲時(shí)出現(xiàn)“DNS lookup failed”,打開網(wǎng)頁卻沒問題,這是什么情況?3. 求教一個(gè)mysql建表分組索引問題4. 小程序怎么加外鏈,語句怎么寫!求救新手,開文檔沒發(fā)現(xiàn)5. html5 - input type=’file’ 上傳獲取的fileList對(duì)象怎么存儲(chǔ)于瀏覽器?6. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時(shí)間會(huì)消失是什么情況?7. python沒入門,請(qǐng)教一個(gè)問題8. php如何獲取訪問者路由器的mac地址9. node.js - 用nodejs 的node-xlsx模塊去讀取excel中的數(shù)據(jù),可是讀取出來的日期是數(shù)字,請(qǐng)問該如何讀取日期呢?10. javascript - 我的站點(diǎn)貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?
