posted @ 2024-10-24 11:34 Jack Jiang 閱讀(135) | 評(píng)論 (0) | 編輯 收藏
一、關(guān)于RainbowChat-Web
RainbowChat-Web是一套Web網(wǎng)頁(yè)端IM系統(tǒng),是RainbowChat的姊妹系統(tǒng)(RainbowChat是一套基于開源IM聊天框架 MobileIMSDK (Github地址) 的產(chǎn)品級(jí)移動(dòng)端IM系統(tǒng))。
二、v7.2 版更新內(nèi)容
此版更新內(nèi)容(更多歷史更新日志):
- 1)[bug] [前端] - 解決了加載首頁(yè)聊天記錄時(shí),存在極小概率出現(xiàn)消息重復(fù)的問題;
- 2)[bug] [前端] - 解決了Firefox瀏覽器中右鍵無(wú)法復(fù)制文本消息的問題;
- 3)[bug] [服務(wù)端] - 升級(jí)了MobileIMSDK-Web庫(kù),解決了服務(wù)端QoS機(jī)制C2S消息路徑時(shí)去重邏輯未起效的問題;
- 4)[優(yōu)化] [前端] - 解決了引用的名片消息不會(huì)顯示默認(rèn)頭像的問題;
- 5)[優(yōu)化] [前端] - 重構(gòu)了相關(guān)的類名、文件名等;
- 6)[優(yōu)化] [服務(wù)端] - 優(yōu)化了離線消息處理效率(異步化、無(wú)鎖隊(duì)列、批量處理、事務(wù)合并);
- 7)[優(yōu)化] [服務(wù)端] - 優(yōu)化了聊天記錄處理效率(異步化、無(wú)鎖隊(duì)列、批量處理、事務(wù)合并);
- 8)[優(yōu)化] [服務(wù)端] - 優(yōu)化了“接口1008-26-8”,使按時(shí)間戳加載的消息在客戶端不發(fā)生重復(fù);
- 9)[優(yōu)化] [服務(wù)端] - 修改了離線消息、聊天記錄異步定時(shí)器實(shí)現(xiàn),使之運(yùn)行更健壯;
- 10)[重構(gòu)] [服務(wù)端] - 重構(gòu)了通用http服務(wù)端工程、MQ工程目錄名等;
三、主要功能特性截圖
主要功能特性截圖(更多運(yùn)行截圖、運(yùn)行視頻):
posted @ 2024-10-21 14:20 Jack Jiang 閱讀(73) | 評(píng)論 (0) | 編輯 收藏
posted @ 2024-10-17 11:10 Jack Jiang 閱讀(90) | 評(píng)論 (0) | 編輯 收藏
關(guān)于RainbowChat
RainbowChat是一套基于開源IM聊天框架 MobileIMSDK 的產(chǎn)品級(jí)移動(dòng)端IM系統(tǒng)。RainbowChat源于真實(shí)運(yùn)營(yíng)的產(chǎn)品,解決了大量的屏幕適配、細(xì)節(jié)優(yōu)化、機(jī)器兼容問題(可自行下載體驗(yàn):專業(yè)版下載安裝)。
* RainbowChat可能是市面上提供im即時(shí)通訊聊天源碼的,唯一一款同時(shí)支持TCP、UDP兩種通信協(xié)議的IM產(chǎn)品(通信層基于開源IM聊天框架 MobileIMSDK 實(shí)現(xiàn))。
► 詳細(xì)產(chǎn)品介紹:http://www.52im.net/thread-19-1-1.html
► 版本更新記錄:http://www.52im.net/thread-1217-1-1.html
► 全部運(yùn)行截圖:Android端、iOS端
► 在線體驗(yàn)下載:專業(yè)版(TCP協(xié)議)、專業(yè)版(UDP協(xié)議) (關(guān)于 iOS 端,請(qǐng):點(diǎn)此查看)
關(guān)于MobileIMSDK
MobileIMSDK 是一套專門為移動(dòng)端開發(fā)的開源IM即時(shí)通訊框架,超輕量級(jí)、高度提煉,一套API優(yōu)雅支持UDP 、TCP 、WebSocket 三種協(xié)議,支持iOS、Android、H5、小程序、Uniapp、標(biāo)準(zhǔn)Java平臺(tái),服務(wù)端基于Netty編寫。
工程開源地址:
- 1)Gitee碼云地址:https://gitee.com/jackjiang/MobileIMSDK
- 2)Github托管地址:https://github.com/JackJiang2011/MobileIMSDK
v11.7 版更新內(nèi)容
此版更新內(nèi)容(更多歷史更新日志):
(1)Android端主要更新內(nèi)容:
- 1)[優(yōu)化] 優(yōu)化了首頁(yè)“消息”列表中單聊類型未正確同步時(shí)的收發(fā)消息和點(diǎn)擊后的處理邏輯;
- 2)[優(yōu)化] 優(yōu)化了首頁(yè)“消息”列表中同一好友和陌生人會(huì)話不能自動(dòng)合并的問題;
(2)服務(wù)端主要更新內(nèi)容:
- 1)[優(yōu)化] 大幅提升群聊性能(改進(jìn)離線消息存儲(chǔ)方式等:異步提交、批量處理);
- 2)[優(yōu)化] 升級(jí)了mysql驅(qū)動(dòng)至最新版8.4.0;
- 3)[優(yōu)化] 優(yōu)化了離線消息處理性能(異步化、無(wú)鎖隊(duì)列、批量處理、事務(wù)合并);
- 4)[優(yōu)化] 優(yōu)化了聊天記錄處理性能(異步化、無(wú)鎖隊(duì)列、批量處理、事務(wù)合并);
- 5)[優(yōu)化] 優(yōu)化了“接口1008-26-8”,使得與Web產(chǎn)品聯(lián)合部署明web前端按時(shí)間戳加載的消息不與客戶端發(fā)生重復(fù);
- 6)[優(yōu)化] 修改了離線消息、聊天記錄異步定時(shí)器實(shí)現(xiàn),使之運(yùn)行更健壯;
- 7)[優(yōu)化] 加好友成功后將成功通知保存至離線消息和消息記錄。
部分功能運(yùn)行截圖(更多截圖點(diǎn)此查看):
posted @ 2024-10-16 10:16 Jack Jiang 閱讀(80) | 評(píng)論 (0) | 編輯 收藏
posted @ 2024-10-10 12:35 Jack Jiang 閱讀(89) | 評(píng)論 (0) | 編輯 收藏
posted @ 2024-10-10 10:18 Jack Jiang 閱讀(149) | 評(píng)論 (0) | 編輯 收藏
posted @ 2024-09-29 12:18 Jack Jiang 閱讀(106) | 評(píng)論 (0) | 編輯 收藏
本文由螢火架構(gòu)分享,原題“localhost和127.0.0.1的區(qū)別是什么?”,原文鏈接“juejin.cn/post/7321049446443417638”,下文進(jìn)行了排版和內(nèi)容優(yōu)化。
1、引言
繼《你真的了解127.0.0.1和0.0.0.0的區(qū)別?》、《深入操作系統(tǒng),徹底搞懂127.0.0.1本機(jī)網(wǎng)絡(luò)通信》之后,這是整理收錄的第3篇有關(guān)本機(jī)網(wǎng)絡(luò)的網(wǎng)絡(luò)編程基礎(chǔ)文章。以下是正文內(nèi)容。
今天在網(wǎng)上逛的時(shí)候看到一個(gè)問題,沒想到大家討論的很熱烈,就是標(biāo)題中這個(gè):

前端同學(xué)本地調(diào)試的時(shí)候,應(yīng)該沒少和localhost打交道吧,只需要執(zhí)行 npm run 就能在瀏覽器中打開你的頁(yè)面窗口,地址欄顯示的就是這個(gè) http://localhost:xxx/index.html。
可能大家只是用,也沒有去想過這個(gè)問題。聯(lián)想到我之前合作過的一些開發(fā)同學(xué)對(duì)它們倆的區(qū)別也沒什么概念,所以我覺得有必要普及下。

- 移動(dòng)端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動(dòng)端IM》
- 開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點(diǎn)此)
2、系列文章
本文是該系列文章中的第 4 篇:
《網(wǎng)絡(luò)編程入門如此簡(jiǎn)單(一):假如你來(lái)設(shè)計(jì)網(wǎng)絡(luò),會(huì)怎么做?》
《網(wǎng)絡(luò)編程入門如此簡(jiǎn)單(二):假如你來(lái)設(shè)計(jì)TCP協(xié)議,會(huì)怎么做?》
《網(wǎng)絡(luò)編程入門如此簡(jiǎn)單(三):什么是IPv6?漫畫式圖文,一篇即懂!》
《網(wǎng)絡(luò)編程入門如此簡(jiǎn)單(四):一文搞懂localhost和127.0.0.1》(* 本文)
3、localhost是什么呢?

localhost是一個(gè)域名,和大家上網(wǎng)使用的域名沒有什么本質(zhì)區(qū)別,就是方便記憶。
只是這個(gè)localhost的有效范圍只有本機(jī),看名字也能知道:local就是本地的意思。
張三和李四都可以在各自的機(jī)器上使用localhost,但獲取到的也是各自的頁(yè)面內(nèi)容,不會(huì)相互打架。
4、從域名到程序
要想真正的認(rèn)清楚localhost,我們還得從用戶是如何通過域名訪問到程序說(shuō)起。
以訪問百度為例。
1)當(dāng)我們?cè)跒g覽器輸入 baidu.com 之后,瀏覽器首先去DNS中查詢 baidu.com 的IP地址。
為什么需要IP地址呢?打個(gè)比方,有個(gè)人要寄快遞到你的公司,快遞單上會(huì)填寫:公司的通訊地址、公司名稱、收件人等信息,實(shí)際運(yùn)輸時(shí)快遞會(huì)根據(jù)通信地址進(jìn)行層層轉(zhuǎn)發(fā),最終送到收件人的手中。網(wǎng)絡(luò)通訊也是類似的,其中域名就像公司名稱,IP地址就像通信地址,在網(wǎng)絡(luò)的世界中只有通過IP地址才能找到對(duì)應(yīng)的程序。(請(qǐng)?jiān)斪x《什么是公網(wǎng)IP和內(nèi)網(wǎng)IP?NAT轉(zhuǎn)換又是什么鬼?》)
DNS就像一個(gè)公司黃頁(yè),其中記錄著每個(gè)域名對(duì)應(yīng)的IP地址,當(dāng)然也有一些域名可能沒做登記,就找不到對(duì)應(yīng)的IP地址,還有一些域名可能會(huì)對(duì)應(yīng)多個(gè)IP地址,DNS會(huì)按照規(guī)則自動(dòng)返回一個(gè)。我們購(gòu)買了域名之后,一般域名服務(wù)商會(huì)提供一個(gè)域名解析的功能,就是把域名和對(duì)應(yīng)的IP地址登記到DNS中。(請(qǐng)?jiān)斪x《理論聯(lián)系實(shí)際,全方位深入理解DNS》)
這里的IP地址從哪里獲取呢?每臺(tái)上網(wǎng)的電腦都會(huì)有1個(gè)IP地址,但是個(gè)人電腦的IP地址一般是不行的,個(gè)人電腦的IP地址只適合內(nèi)網(wǎng)定位,就像你公司內(nèi)部的第幾棟第幾層,公司內(nèi)部人明白,但是直接發(fā)給別人,別人是找不到你的。
如果你要對(duì)外部提供服務(wù),比如百度這種,你就得有公網(wǎng)的IP地址,這個(gè)IP地址一般由網(wǎng)絡(luò)服務(wù)運(yùn)營(yíng)商提供,比如你們公司使用聯(lián)通上網(wǎng),那就可以讓聯(lián)通給你分配一個(gè)公網(wǎng)IP地址,綁定到你們公司的網(wǎng)關(guān)服務(wù)器上,網(wǎng)關(guān)服務(wù)器就像電話總機(jī),公司內(nèi)部的所有網(wǎng)絡(luò)通信都要通過它,然后再在網(wǎng)關(guān)上設(shè)置轉(zhuǎn)發(fā)規(guī)則,將網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)到提供網(wǎng)絡(luò)服務(wù)的機(jī)器上。
2)有了IP地址之后,瀏覽器就會(huì)向這個(gè)IP地址發(fā)起請(qǐng)求,通過操作系統(tǒng)打包成IP請(qǐng)求包,然后發(fā)送到網(wǎng)絡(luò)上。
網(wǎng)絡(luò)傳輸有一套完整的路由協(xié)議,它會(huì)根據(jù)你提供的IP地址,經(jīng)過路由器的層層轉(zhuǎn)發(fā),最終抵達(dá)綁定該IP的計(jì)算機(jī)。
3)計(jì)算機(jī)上可能部署了多個(gè)網(wǎng)絡(luò)應(yīng)用程序,這個(gè)請(qǐng)求應(yīng)該發(fā)給哪個(gè)程序呢?
這里有一個(gè)端口的概念,每個(gè)網(wǎng)絡(luò)應(yīng)用程序啟動(dòng)的時(shí)候可以綁定一個(gè)或多個(gè)端口,不同的網(wǎng)絡(luò)應(yīng)用程序綁定的端口不能重復(fù),再次綁定時(shí)會(huì)提示端口被占用。
通過在請(qǐng)求中指定端口,就可以將消息發(fā)送到正確的網(wǎng)絡(luò)處理程序。但是我們?cè)L問百度的時(shí)候沒有輸入端口啊?這是因?yàn)槟J(rèn)不輸入就使用80和443端口,http使用80,https使用443。我們?cè)趩?dòng)網(wǎng)絡(luò)程序的時(shí)候一定要綁定一個(gè)端口的,當(dāng)然有些框架會(huì)自動(dòng)選擇一個(gè)計(jì)算機(jī)上未使用的端口。

5、localhost和127.0.0.1的區(qū)別是什么?

有了前面的知識(shí)儲(chǔ)備,我們就可以很輕松的搞懂這個(gè)問題了。
localhost是域名,上文已經(jīng)說(shuō)過了。
127.0.0.1 呢?是IP地址,當(dāng)前機(jī)器的本地IP地址,且只能在本機(jī)使用,你的計(jì)算機(jī)不聯(lián)網(wǎng)也可以用這個(gè)IP地址,就是為了方便開發(fā)測(cè)試網(wǎng)絡(luò)程序的。
我們調(diào)試時(shí)啟動(dòng)的程序就是綁定到這個(gè)IP地址的。
這里簡(jiǎn)單說(shuō)下,我們經(jīng)常看到的IP地址一般都是類似 X.X.X.X 的格式,用"."分成四段。其實(shí)它是一個(gè)32位的二進(jìn)制數(shù),分成四段后,每一段是8位,然后每一段再轉(zhuǎn)換為10進(jìn)制的數(shù)進(jìn)行顯示。
那localhost是怎么解析到127.0.0.1的呢?經(jīng)過DNS了嗎?沒有。每臺(tái)計(jì)算機(jī)都可以使用localhost和127.0.0.1,這沒辦法讓DNS來(lái)做解析。
那就讓每臺(tái)計(jì)算機(jī)自己解決了。每臺(tái)計(jì)算機(jī)上都有一個(gè)host文件,其中寫死了一些DNS解析規(guī)則,就包括 localhost 到 127.0.0.1 的解析規(guī)則,這是一個(gè)約定俗成的規(guī)則。
如果你不想用localhost,那也可以,隨便起個(gè)名字,比如 wodehost,也解析到 127.0.0.1 就行了。
甚至你想使用 baidu.com 也完全可以,只是只能自己自嗨,對(duì)別人完全沒有影響。
PS:以下兩篇可以深入進(jìn)行閱讀:
6、域名的等級(jí)劃分
localhost不太像我們平常使用的域名,比如 www.juejin.cn 、baidu.com、csdn.net, 這里邊的 www、cn、com、net都是什么意思?localhost為什么不需要?
域名其實(shí)是分等級(jí)的,按照等級(jí)可以劃分為頂級(jí)域名、二級(jí)域名和三級(jí)域名...
1)頂級(jí)域名(TLD):
頂級(jí)域名是域名系統(tǒng)中最高級(jí)別的域名。它位于域名的最右邊,通常由幾個(gè)字母組成。頂級(jí)域名分為兩種類型:通用頂級(jí)域名和國(guó)家頂級(jí)域名。常見的通用頂級(jí)域名包括表示工商企業(yè)的.com、表示網(wǎng)絡(luò)提供商的.net、表示非盈利組織的.org等,而國(guó)家頂級(jí)域名則代表特定的國(guó)家或地區(qū),如.cn代表中國(guó)、.uk代表英國(guó)等。
2)二級(jí)域名(SLD):
二級(jí)域名是在頂級(jí)域名之下的一級(jí)域名。它是由注冊(cè)人自行選擇和注冊(cè)的,可以是個(gè)性化的、易于記憶的名稱。例如,juejin.cn 就是二級(jí)域名。我們平常能夠申請(qǐng)到的也是這種。目前來(lái)說(shuō)申請(qǐng) xxx.com、xxx.net、xxx.cn等等域名,其實(shí)大家不太關(guān)心其頂級(jí)域名com\net\cn代表的含義,看著簡(jiǎn)短好記是主要訴求。
3)三級(jí)域名(3LD):
三級(jí)域名是在二級(jí)域名之下的一級(jí)域名。它通常用于指向特定的服務(wù)器或子網(wǎng)。例如,在blog.example.com中,blog就是三級(jí)域名。www是最常見的三級(jí)域名,用于代表網(wǎng)站的主頁(yè)或主站點(diǎn),不過這只是某種流行習(xí)慣,目前很多網(wǎng)站都推薦直接使用二級(jí)域名訪問了。
域名級(jí)別還可以進(jìn)一步細(xì)分,大家可以看看企業(yè)微信開放平臺(tái)這個(gè)域名:developer.work.weixin.qq.com,com代表商業(yè),qq代表騰訊,weixin代表微信,work代表企業(yè)微信,developer代表開發(fā)者。這種逐層遞進(jìn)的方式有利于域名的分配管理。
按照上邊的等級(jí)定義,我們可以說(shuō)localhost是一個(gè)頂級(jí)域名,只不過它是保留的頂級(jí)域,其唯一目的是用于訪問當(dāng)前計(jì)算機(jī)。

7、多網(wǎng)站共用一個(gè)IP和端口
上邊我們說(shuō)不同的網(wǎng)絡(luò)程序不能使用相同的端口,其實(shí)是有辦法突破的。
以前個(gè)人博客比較火的時(shí)候,大家都喜歡買個(gè)虛擬主機(jī),然后部署個(gè)開源的博客程序,抒發(fā)一下自己的感情。為了掙錢,虛擬主機(jī)的服務(wù)商會(huì)在一臺(tái)計(jì)算機(jī)上分配N多個(gè)虛擬主機(jī),大家使用各自的域名和默認(rèn)的80端口進(jìn)行訪問,也都相安無(wú)事。這是怎么做到的呢?
如果你有使用Nginx、Apache或者IIS等Web服務(wù)器的相關(guān)經(jīng)驗(yàn),你可能會(huì)接觸到主機(jī)頭這個(gè)概念。主機(jī)頭其實(shí)就是一個(gè)域名,通過設(shè)置主機(jī)頭,我們的程序就可以共用1個(gè)網(wǎng)絡(luò)端口。
首先在Nginx等Web程序中部署網(wǎng)站時(shí),我們會(huì)進(jìn)行一些配置,此時(shí)在主機(jī)頭中寫入網(wǎng)站要使用的域名。
然后Nginx等Web服務(wù)器啟動(dòng)的時(shí)候,會(huì)把80端口占為己有。
然后當(dāng)某個(gè)網(wǎng)站的請(qǐng)求到達(dá)Nginx的80端口時(shí),它會(huì)根據(jù)請(qǐng)求中攜帶的域名找到配置了對(duì)應(yīng)主機(jī)頭的網(wǎng)絡(luò)程序。
然后再轉(zhuǎn)發(fā)到這個(gè)網(wǎng)絡(luò)程序,如果網(wǎng)絡(luò)程序還沒有啟動(dòng),Nginx會(huì)把它拉起來(lái)。
8、私有IP地址
除了127.0.0.1,其實(shí)還有很多私有IP地址,比如常見的 192.168.x.x。
這些私有IP地址大部分都是為了在局域網(wǎng)內(nèi)使用而預(yù)留的,因?yàn)榻o每臺(tái)計(jì)算機(jī)都分配一個(gè)獨(dú)立的IP不太夠用,所以只要局域網(wǎng)內(nèi)不沖突,大家就可勁的用吧。你公司可以用 192.168.1.1,我公司也可以用192.168.1.1。
但是如果你要訪問我,就得通過公網(wǎng)IP進(jìn)行轉(zhuǎn)發(fā)。
大家常用的IPv4私有IP地址段分為三類:
- 1)A類:從10.0.0.0至10.255.255.255;
- 2)B類:從172.16.0.0至172.31.255.255;
- 3)C類:從192.168.0.0至192.168.255.255。
這些私有IP地址僅供局域網(wǎng)內(nèi)部使用,不能在公網(wǎng)上使用。
除了上述三個(gè)私有的IPv4地址段外,還有一些保留的IPv4地址段:
1)用于本地回環(huán)測(cè)試的127.0.0.0至127.255.255.255地址段,其中就包括題目中的127.0.0.1,如果你喜歡也可以給自己分配一個(gè)127.0.0.2的IP地址,效果和127.0.0.1一樣。
2)用于局域網(wǎng)內(nèi)部的169.254.0.0至169.254.255.255地址段,這個(gè)很少接觸到,如果你的電腦連局域網(wǎng)都上不去,可能會(huì)看到這個(gè)IP地址,它是臨時(shí)分配的一個(gè)局域網(wǎng)地址。
這些地址段也都不能在公網(wǎng)上使用。
近年來(lái),還有一個(gè)現(xiàn)象,就是你家里或者公司里上網(wǎng)時(shí),光貓或者路由器對(duì)外的IPv4地址也不是公網(wǎng)IP了,這時(shí)候獲得的可能是一個(gè)類似 100.64.x.x 的地址,這是因?yàn)殡S著寬帶的普及,運(yùn)營(yíng)商手里的公網(wǎng)IP也不夠了,所以運(yùn)營(yíng)商又加了一層局域網(wǎng),而100.64.0.0 這個(gè)網(wǎng)段是專門分給運(yùn)營(yíng)商做局域網(wǎng)用的。
如果你使用阿里云等公有云,一些云產(chǎn)品的IP地址也可能是這個(gè),這是為了將客戶的私有網(wǎng)段和公有云廠商的私有網(wǎng)段進(jìn)行有效的區(qū)分。
其實(shí)還有一些不常見的專用IPv4地址段,完整的IP地址段定義可以看這里:www.iana.org/assignments…

9、IPv6
你可能也聽說(shuō)過IPv6,因?yàn)镮Pv4可分配的地址太少了,不夠用,使用IPv6甚至可以為地球上的每一粒沙子分配一個(gè)IP。只是喊了很多年,大家還是喜歡用IPv4,這里邊原因很多,這里就不多談了。
IPv6地址類似于:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX。

它是128位的,用":"分成8段,每個(gè)X是一個(gè)16進(jìn)制數(shù)(取值范圍:0-F),IPv6地址空間相對(duì)于IPv4地址有了極大的擴(kuò)充。比如:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b 就是一個(gè)有效的IPv6地址。(請(qǐng)?jiān)斪x《什么是IPv6?漫畫式圖文,一篇即懂!》)
10、參考資料
[1] 你真的了解127.0.0.1和0.0.0.0的區(qū)別?
[2] 深入操作系統(tǒng),徹底搞懂127.0.0.1本機(jī)網(wǎng)絡(luò)通信
[4] 一文讀懂什么是IPv6
[5] IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(上篇)
[6] 什么是公網(wǎng)IP和內(nèi)網(wǎng)IP?NAT轉(zhuǎn)換又是什么鬼?
[7] 深入操作系統(tǒng),一文搞懂Socket到底是什么
[8] 面視必備,史上最通俗計(jì)算機(jī)網(wǎng)絡(luò)分層詳解
posted @ 2024-09-26 10:23 Jack Jiang 閱讀(103) | 評(píng)論 (0) | 編輯 收藏
posted @ 2024-09-25 11:17 Jack Jiang 閱讀(277) | 評(píng)論 (0) | 編輯 收藏
► 相關(guān)鏈接:
- ① MobileIMSDK-H5端的詳細(xì)介紹
- ② MobileIMSDK-H5端的開發(fā)手冊(cè)new(* 精編PDF版)
一、技術(shù)準(zhǔn)備
您是否已對(duì)Web端即時(shí)通訊技術(shù)有所了解?
您需要對(duì)WebSocket技術(shù)有所了解:
- 1)新手快速入門:WebSocket簡(jiǎn)明教程
- 2)WebSocket詳解(一):初步認(rèn)識(shí)WebSocket技術(shù)
- 3)WebSocket從入門到精通,半小時(shí)就夠!
- 4)從零理解WebSocket的通信原理、協(xié)議格式、安全性
WebSocket標(biāo)準(zhǔn)文檔、API手冊(cè):
二、開發(fā)工具準(zhǔn)備
1)WebStorm:

(JackJiang 使用的版本號(hào)如上圖所示,建議你也使用此版或較新版本)
2)一站式下載地址:WebStorm官方下載地址點(diǎn)此進(jìn)入。
三、工程文件用途說(shuō)明
3.1文件概覽
純?cè)鶭S實(shí)現(xiàn),無(wú)任何重框架依賴:
MobileIMSDK-H5端SDK本身只是JS文件源碼的集合,本工程中自帶的前端Demo的目的只是為了方便隨時(shí)測(cè)試MobileIMSDK-H5端的SDK代碼而已,在此工程中的使用也僅僅只涉及了一個(gè)主Demo頁(yè)面而已。
工程目錄說(shuō)明:

3.2詳細(xì)說(shuō)明
SDK 各模塊/文件作用說(shuō)明:
四、主要 API 接口
4.1主要 API 接口概覽
如下圖所示:所有 SDK 接口均由/mobileimsdk/mobileimsdk-client-sdk.js 提供。,接口設(shè)計(jì)跟MobileIMSDK 的APP版一樣,均為高內(nèi)聚和低侵入的回調(diào)方式傳入SDK處理邏輯,無(wú)需(也不建議)開發(fā)者直接修改sdk級(jí)代碼。

▲ 圖上為瀏覽器端SDK的對(duì)外接口文件位置

▲ 圖上為瀏覽器SDK為開發(fā)者提供的回調(diào)接口
▲ 圖上瀏覽器端SDK的對(duì)外接口文件全圖
4.2主要 API 接口用途說(shuō)明
1)IMSDK.isLogined():
- 用途:是否已經(jīng)完成過首次登陸。
- 說(shuō)明 :用戶一旦從自已的應(yīng)用中完成登陸IM服務(wù)器后,本方法就會(huì)一直返回true(直到退出登陸IM)。
- 返回值:{boolean},true表示已完成首次成功登陸(即已經(jīng)成功登陸過IM服務(wù)端了,后面掉線時(shí)不影響此標(biāo)識(shí)),否則表示尚未連接IM服務(wù)器。
2)IMSDK.isOnline():
- 用途:是否在線。
- 說(shuō)明 :表示網(wǎng)絡(luò)連接是否正常。
- 返回值:{boolean},true表示網(wǎng)絡(luò)連接正常,否則表示已掉線,本字段只在this._logined=true時(shí)有意義(如果都沒有登陸到IM服務(wù)器,怎么存在在線或掉線的概念呢)。
3)IMSDK.getLoginInfo():
- 用途:返回登陸時(shí)提交的登陸信息(用戶名、密碼/token等)。
- 說(shuō)明 :格式形如:{loginUserId:'',loginToken:''},此返回值的內(nèi)容由調(diào)用登陸函數(shù) loginImpl()時(shí)傳入的內(nèi)容決定。字段定義詳見:PLoginInfo
- 返回值:{boolean},true表示網(wǎng)絡(luò)連接正常,否則表示已掉線,本字段只在this._logined=true時(shí)有意義(如果都沒有登陸到IM服務(wù)器,怎么存在在線或掉線的概念呢)。
4)IMSDK.sendData(p, fnSucess, fnFail, fnComplete):
- 用途:向某人發(fā)送一條消息。
- 參數(shù)p:{Protocal} 要發(fā)送的消息協(xié)議包對(duì)象,Protocal詳情請(qǐng)見“/module/mb_constants.js”下的createCommonData函數(shù)說(shuō)明。
- 返回值:{int} 0表示成功,否則表示錯(cuò)誤碼,錯(cuò)碼詳見“/module/mb_constants.js”下的MBErrorCode對(duì)象屬性說(shuō)明。
5)IMSDK.disconnectSocket():
- 用途:客戶端主動(dòng)斷開客戶端socket連接。
- 說(shuō)明 :當(dāng)開發(fā)者登陸IM后,需要退出登陸時(shí),調(diào)用本函數(shù)就對(duì)了,本函數(shù)相當(dāng)于登陸函數(shù) loginImpl()的逆操作。
6)IMSDK.setDebugCoreEnable(enable):
- 用途:是否開啟MobileIMSDK-H5端核心算法層的log輸入,方便開發(fā)者調(diào)試。
- 參數(shù)enable :{boolean} true表示開啟log輸出,否則不輸出,開發(fā)者不調(diào)用本函數(shù)的話系統(tǒng)默認(rèn)是false(即不輸出log)。
7)IMSDK.setDebugSDKEnable(enable):
- 用途:是否開啟MobileIMSDK-H5端框架層的log輸入,方便開發(fā)者調(diào)試。
- 參數(shù)enable :{boolean} true表示開啟log輸出,否則不輸出,開發(fā)者不調(diào)用本函數(shù)的話系統(tǒng)默認(rèn)是false(即不輸出log)。
8)IMSDK.setDebugPingPongEnable(enable):
- 用途:是否開啟MobileIMSDK-H5端框架層的底層網(wǎng)絡(luò)WebSocket心跳包的log輸出,方便開發(fā)者調(diào)試。
- 參數(shù)enable :{boolean} true表示開啟log輸出,否則不輸出,開發(fā)者不調(diào)用本函數(shù)的話系統(tǒng)默認(rèn)是false(即不輸出log)。
- 注意:必須 setDebugEnable(true) 且 setDebugPingPongEnable(true) 時(shí),心跳log才會(huì)真正輸出,方便控制。
- 返回值:true表示開啟log輸出,否則不輸出,開發(fā)者不調(diào)用本函數(shù)的話系統(tǒng)默認(rèn)是false(即不輸出log)。
9)IMSDK.loginImpl(varloginInfo, wsUrl):
- 用途:登陸/連接MobileIMSDK服務(wù)器時(shí)調(diào)用的方法。
- 說(shuō)明 :登陸/連接MobileIMSDK服務(wù)器由本函數(shù)發(fā)起
- 參數(shù)varloginInfo:{PLoginInfo} 必填項(xiàng),登陸要提交給Websocket服務(wù)器的認(rèn)證信息,不可為空,對(duì)象字段定義見:PLoginInfo
- 參數(shù)wsUrl:{string} 必填項(xiàng):要連接的Websocket服務(wù)器地址,不可為空,形如:wss://yousite.net:3000/websocket。
10)IMSDK.callback_onIMLog(message, toConsole):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:用于debug的log輸出。
- 推薦用法 :開發(fā)者可在此回調(diào)中按照自已的意圖打印MobileIMSDK微信小程序端框架中的log,方便調(diào)試時(shí)使用。
- 參數(shù)1: {String}:必填項(xiàng),字符串類型,表示log內(nèi)容。
- 參數(shù)2: {boolean}:選填項(xiàng),true表示輸出到console,否則默認(rèn)方式(由開發(fā)者設(shè)置的回調(diào)決定)。
11)IMSDK.callback_onIMData(p, options):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:用于收到聊天消息時(shí)在UI上展現(xiàn)出來(lái)(事件通知于收到IM消息時(shí))。
- 推薦用法:開發(fā)者可在此回調(diào)中處理收到的各種IM消息。
- 參數(shù)1: {Protocal}:詳情請(qǐng)見“/module/mb_constants.js”下的Protocal類定義)。
12)IMSDK.callback_onIMAfterLoginSucess():
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:客戶端的登陸請(qǐng)求被服務(wù)端成功認(rèn)證完成后的回調(diào)(事件通知于 登陸/認(rèn)證 成功后)。
- 推薦用法 :開發(fā)者可在此回調(diào)中進(jìn)行登陸IM服務(wù)器成功后的處理。
13)IMSDK.callback_onIMAfterLoginFailed(isReconnect):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:客戶端的登陸請(qǐng)求被服務(wù)端認(rèn)證失敗后的回調(diào)(事件通知于 登陸/認(rèn)證 失敗后)。
- 說(shuō)明 :登陸/認(rèn)證失敗的原因可能是用戶名、密碼等不正確等,但具體邏輯由服務(wù)端的 callBack_checkAuthToken回調(diào)函數(shù)去處理。
- 推薦用法:開發(fā)者可在此回調(diào)中提示用戶登陸IM服務(wù)器失敗。。
- 參數(shù)1: {boolean}:true表示是掉線重連后的認(rèn)證失敗(在登陸其間可能用戶的密碼信息等發(fā)生了變更),否則表示首次登陸時(shí)的認(rèn)證失敗。
14)IMSDK.callback_onIMReconnectSucess():
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:掉線重連成功后的回調(diào)(事件通知于掉線重連成功后)。
- 推薦用法 :開發(fā)者可在此回調(diào)中處理掉線重連成功后的界面狀態(tài)更新等,比如設(shè)置將界面上的“離線”文字更新成“在線”。
15)IMSDK.callback_onIMDisconnected():
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:網(wǎng)絡(luò)連接已斷開時(shí)的回調(diào)(事件通知于與服務(wù)器的網(wǎng)絡(luò)斷開后)。
- 推薦用法 :開發(fā)者可在此回調(diào)中處理掉線時(shí)的界面狀態(tài)更新等,比如設(shè)置將界面上的“在線”文字更新成“離線”。
16)IMSDK.callback_onIMPing():
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:本地發(fā)出心跳包后的回調(diào)通知(本回調(diào)并非MobileIMSDK-H5端核心邏輯,開發(fā)者可以不需要實(shí)現(xiàn)!)。
- 推薦用法 :開發(fā)者可在此回調(diào)中處理底層網(wǎng)絡(luò)的活動(dòng)情況。
17)IMSDK.callback_onIMPong():
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:收到服務(wù)端的心跳包反饋的回調(diào)通知(本回調(diào)并非MobileIMSDK-H5端核心邏輯,開發(fā)者可以不需要實(shí)現(xiàn)!)。
- 推薦用法 :開發(fā)者可在此回調(diào)中處理底層網(wǎng)絡(luò)的活動(dòng)情況。
18)IMSDK.callback_onIMShowAlert(alertContent):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:框架層的一些提示信息顯示回調(diào)(本回調(diào)并非MobileIMSDK-H5端核心邏輯,開發(fā)者可以不需要實(shí)現(xiàn)!)。
- 說(shuō)明 :開發(fā)者不設(shè)置的情況下,框架默認(rèn)將調(diào)用wx.showModal()顯示提示信息,否則將使用開發(fā)者設(shè)置的回調(diào)——目的主要是給開發(fā)者自定義這種信息的UI顯示,提升UI體驗(yàn),別無(wú)它用】。
- 參數(shù)1:{String}:必填項(xiàng),文本類型,表示提示內(nèi)容。
19)IMSDK.callback_onIMKickout(kickoutInfo):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:收到服務(wù)端的“踢出”指令(本回調(diào)并非MobileIMSDK-H5端核心邏輯,開發(fā)者可以不需要實(shí)現(xiàn)!)。
- 參數(shù)1 :{PKickoutInfo}:非空,詳見:PKickoutInfo
20)IMSDK.callback_onMessagesLost(lostMessages):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:消息未送達(dá)的回調(diào)事件通知。
- 發(fā)生場(chǎng)景 :比如用戶剛發(fā)完消息但網(wǎng)絡(luò)已經(jīng)斷掉了的情況下,表現(xiàn)形式如:就像手機(jī)qq或微信一樣消息氣泡邊上會(huì)出現(xiàn)紅色圖標(biāo)以示沒有發(fā)送成功)。
- 建議用途:應(yīng)用層可通過回調(diào)中的指紋特征碼找到原消息并可以UI上將其標(biāo)記為“發(fā)送失敗”以便即時(shí)告之用戶。
- 參數(shù)1:{Array}:由框架的QoS算法判定出來(lái)的未送達(dá)消息列表。
21)IMSDK.callback_onMessagesBeReceived(theFingerPrint):
- 用途:由開發(fā)者設(shè)置的回調(diào)方法:消息已被對(duì)方收到的回調(diào)事件通知。
- 說(shuō)明 :目前,判定消息被對(duì)方收到是有兩種可能:1) 對(duì)方確實(shí)是在線并且實(shí)時(shí)收到了;2) 對(duì)方不在線或者服務(wù)端轉(zhuǎn)發(fā)過程中出錯(cuò)了,由服務(wù)端進(jìn)行離線存儲(chǔ)成功后的反饋(此種情況嚴(yán)格來(lái)講不能算是“已被收到”,但對(duì)于應(yīng)用層來(lái)說(shuō),離線存儲(chǔ)了的消息原則上就是已送達(dá)了的消息:因?yàn)橛脩粝麓蔚顷憰r(shí)肯定能通過HTTP協(xié)議取到)。
- 建議用途:應(yīng)用層可通過回調(diào)中的指紋特征碼找到原消息并可以UI上將其標(biāo)記為“發(fā)送成功”以便即時(shí)告之用戶。
- 參數(shù)1:{String}:已被收到的消息的指紋特征碼(唯一ID),應(yīng)用層可據(jù)此ID找到原先已發(fā)的消息并可在UI是將其標(biāo)記為”已送達(dá)“或”已讀“以便提升用戶體驗(yàn)。
五、前端開發(fā)指南
5.1如何引入SDK文件到您的前端工程中?
很簡(jiǎn)單:只需要將第2節(jié)中提到的SDK所有JS文件復(fù)制到您的Uniapp工程下即可。
SDK內(nèi)容見下圖:

5.2如何在代碼中調(diào)用SDK?
第一步:在你的網(wǎng)頁(yè)中引用SDK的js文件(具體例子詳見Demo中的index.html文件)

第二步:直接在你的JS文件中編寫回調(diào)配置代碼(具體例子詳見Demo中的index.js文件)
第三步:在你的JS文件中調(diào)用IM的登陸方法即可(具體例子詳見Demo中的index.js文件)
注意:上圖中登錄連接的IP地址請(qǐng)?jiān)O(shè)置為您的MobileIMSDK服務(wù)器地址哦。
六、Demo運(yùn)行方法(在WebStorm中直接預(yù)覽)
6.1重要說(shuō)明
特別說(shuō)明:MobileIMSDK的H5端(包括Demo在內(nèi)),全部是靜態(tài)的HTML+JS資源,可以通過WebStorm自帶的HTML頁(yè)面預(yù)覽功能,直接自動(dòng)加載到電腦的瀏覽器中運(yùn)行和預(yù)覽。
6.2預(yù)覽方法
1)在Demo中的index.html文件中,移動(dòng)鼠標(biāo),會(huì)在右上角出現(xiàn)如下圖所示的浮出菜單:
2)點(diǎn)擊右上角浮出菜單上相應(yīng)的瀏覽器就可以自動(dòng)預(yù)覽了(這里以我電腦上已安裝的Edge瀏覽器為例):
七、Demo運(yùn)行方法(在Web服務(wù)器中部署并訪問)
7.1重要說(shuō)明
特別說(shuō)明:MobileIMSDK的H5端(包括Demo在內(nèi)),全部是靜態(tài)的HTML+JS資源,對(duì)于服務(wù)端是沒有任何依賴的,只需要保證瀏覽器端能加載到即可,可以把它們放置在Tomcat、Apache、IIS、Nginx等等傳統(tǒng)Web服務(wù)器中即可,無(wú)需任何動(dòng)態(tài)運(yùn)行環(huán)境。
7.2安裝Tomcat
提示:以下Demo的部署,以Java程序員最常用和Tomcat為例(Apache、IIS、Nginx等依此類推)。
Tomcat的安裝就沒什么好說(shuō)的,直接官網(wǎng)下載對(duì)應(yīng)的版本即可:https://tomcat.apache.org/download-90.cgi。
7.3配置要連接的MobileIMSDK服務(wù)器IP
注意:下圖中登陸連接的IP地址請(qǐng)?jiān)O(shè)置為您的MobileIMSDK服務(wù)器地址哦。
友情提示: MobileIMSDK的服務(wù)端該怎么部署就不是本手冊(cè)要討論的內(nèi)容了,你可以參見《即時(shí)通訊框架MobileIMSDK的Demo使用幫助:Server端》。
▲ 配置要連接的服務(wù)器IP(以上代碼詳見demo/index.js 文件)
7.4部署Demo
說(shuō)“部署”有點(diǎn)扯蛋,因?yàn)镈emo(包括SDK)在內(nèi),全是HTML靜態(tài)內(nèi)容,只需要直接復(fù)制到任何一種Web服務(wù)器即可。
以下是復(fù)制到Tomcat服務(wù)器網(wǎng)頁(yè)目錄后的截圖:

7.5啟動(dòng)Tomcat
提示:本手冊(cè)中僅以啟Tomcat為例,Apache、IIS、Nginx等Web服務(wù)器的啟動(dòng)請(qǐng)自動(dòng)百度。
運(yùn)行startup.bat啟動(dòng)Tomcat:

7.6Demo的運(yùn)行效果預(yù)覽
八、Demo功能預(yù)覽和說(shuō)明
九、Demo運(yùn)行效果實(shí)拍圖
1)Demo在手機(jī)端瀏覽器中的真機(jī)實(shí)拍圖:
2)Demo在電腦端瀏覽器中的真機(jī)實(shí)拍圖:
十、更多Demo運(yùn)行效果截圖
1)Demo在PC端瀏覽器運(yùn)行效果:
2)Demo在手機(jī)端瀏覽器運(yùn)行效果:
3)Demo在PC端各主流瀏覽器的運(yùn)行效果:
十一、常見問題(FAQ)
11.1為什么瀏覽控制臺(tái)下有些log不顯示?
原因是瀏覽器控制臺(tái)下的日志級(jí)別默認(rèn)進(jìn)行了過濾,勾選所有日志級(jí)別,就能看到SDK的詳細(xì)日志輸出了。
勾選所有的日志輸出級(jí)別:
然后就能看到SDK中詳細(xì)的日志輸出了(就像下圖這樣),方便調(diào)試和研究:

十二、引用資料
[1] WebSocket 標(biāo)準(zhǔn)API手冊(cè)
[3] MobileIMSDK開源IM框架源碼(Github地址點(diǎn)此)
[5] MobileIMSDK-H5端的開發(fā)手冊(cè)(* 精編PDF版)
posted @ 2024-09-19 13:14 Jack Jiang 閱讀(84) | 評(píng)論 (0) | 編輯 收藏