Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

               摘要: 1、引言當(dāng)你在瀏覽器輸入 qq.com 按下回車鍵,到頁(yè)面呈現(xiàn)在你面前,整個(gè)過程發(fā)生了什么?我以前思考過這個(gè)問題,從最前面的瀏覽器到最后的 db 都梳理的一遍,觸發(fā)了一次技術(shù)頓悟,將很多散落的知識(shí)點(diǎn)貫通起來(lái)了。本文將拋棄千篇一律的計(jì)網(wǎng)知識(shí)理論,從現(xiàn)實(shí)的互聯(lián)網(wǎng)技術(shù)實(shí)踐角度,一步步為你分享一次網(wǎng)絡(luò)請(qǐng)求背后的技術(shù)秘密。 技術(shù)交流:- 移動(dòng)端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動(dòng)端I...  閱讀全文

          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)編輯 收藏

               摘要: 本文由陸業(yè)聰分享,原題“一文掌握直播技術(shù):實(shí)時(shí)音視頻采集、編碼、傳輸與播放”,本文進(jìn)行了排版和內(nèi)容優(yōu)化。1、引言從游戲、教育、電商到娛樂,直播技術(shù)的應(yīng)用場(chǎng)景無(wú)處不在。隨著移動(dòng)端的網(wǎng)速越來(lái)越快,直播技術(shù)的普及和發(fā)展將更加迅速。本文詳細(xì)介紹了Android端直播技術(shù)的全貌,涵蓋了從實(shí)時(shí)音視頻采集、編碼、傳輸?shù)浇獯a與播放的各個(gè)環(huán)節(jié)。文章還探討了直播中音視頻同步、編解碼器選擇、傳輸...  閱讀全文

          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編寫。

          工程開源地址:

          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)編輯 收藏

               摘要: 本文由百度技術(shù)團(tuán)隊(duì)分享,引用自百度Geek說(shuō),原題“百度Android IM SDK組件能力建設(shè)及應(yīng)用”,本文進(jìn)行了排版和內(nèi)容優(yōu)化。1、引言移動(dòng)互聯(lián)網(wǎng)時(shí)代,隨著社交媒體、移動(dòng)支付、線上購(gòu)物等行業(yè)的快速發(fā)展,對(duì)即時(shí)通訊功能的需求不斷增加。對(duì)于各APP而言,接入IM SDK(即時(shí)通訊軟件開發(fā)工具包)能夠大大降低開發(fā)成本、提高開發(fā)效率,快速構(gòu)建自己的IM系統(tǒng)。本文主要介紹了百度公...  閱讀全文

          posted @ 2024-10-10 12:35 Jack Jiang 閱讀(89) | 評(píng)論 (0)編輯 收藏

               摘要: 本文來(lái)自微信團(tuán)隊(duì)工程師張文瑞的技術(shù)分享,由“極客邦科技Geekbang”編輯發(fā)布,下文有修訂和改動(dòng)。一、開場(chǎng)白謝謝大家!我是來(lái)自騰訊WXG技術(shù)架構(gòu)部的張文瑞,今天下午跟大家分享的主題是:微信團(tuán)隊(duì)是如何從0到1實(shí)現(xiàn)“有把握”的微信春晚?yè)u一搖紅包系統(tǒng)的。回憶一下春晚的活動(dòng),有什么樣的活動(dòng)形式呢?當(dāng)時(shí)我們是直接復(fù)用客戶端搖一搖入口,專門給春晚?yè)u一搖定制了一...  閱讀全文

          posted @ 2024-10-10 10:18 Jack Jiang 閱讀(149) | 評(píng)論 (0)編輯 收藏

               摘要: 1、前言在猴年新春的時(shí)候,騰訊當(dāng)時(shí)推出了新春廣告片(點(diǎn)擊觀看視頻),作為《彈指間 心無(wú)間》的延續(xù)。片中通過春節(jié)期間發(fā)送QQ紅包讓家人打車回家團(tuán)聚,讓我們感受到了“最溫暖的紅包,給最愛的人”那種彈指間的感動(dòng)。而就在這彈指一揮間,此次騰訊新春廣告片距離2011年騰訊發(fā)布《彈指間 心無(wú)間》“親情篇”已經(jīng)好幾年過去了。在這幾年的時(shí)間里,騰訊QQ從音頻、視頻、...  閱讀全文

          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ū)別也沒什么概念,所以我覺得有必要普及下。

           
           

          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)行閱讀:

          1. 你真的了解127.0.0.1和0.0.0.0的區(qū)別?
          2. 深入操作系統(tǒng),徹底搞懂127.0.0.1本機(jī)網(wǎng)絡(luò)通信

          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ò)通信

          [3] 什么是IPv6?漫畫式圖文,一篇即懂!

          [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ò)分層詳解

          [9] 通俗講解,有了IP地址,為何還要用MAC地址?

          [10] 理論聯(lián)系實(shí)際,全方位深入理解DNS


          (本文已同步發(fā)布于:http://www.52im.net/thread-4702-1-1.html

          posted @ 2024-09-26 10:23 Jack Jiang 閱讀(103) | 評(píng)論 (0)編輯 收藏

               摘要: 1、前言微信——騰訊戰(zhàn)略級(jí)產(chǎn)品,創(chuàng)造移動(dòng)互聯(lián)網(wǎng)增速記錄,10個(gè)月5000萬(wàn)手機(jī)用戶,433天之內(nèi)完成用戶數(shù)從零到一億的增長(zhǎng)過程,千萬(wàn)級(jí)用戶同時(shí)在線,搖一搖每天次數(shù)過億...在技術(shù)架構(gòu)上,微信是如何做到的?日前,在騰訊大講堂在中山大學(xué)校園宣講活動(dòng)上,騰訊廣研助理總經(jīng)理、微信技術(shù)總監(jiān)周顥在兩小時(shí)的演講中揭開了微信背后的秘密。周顥把微信的成功歸結(jié)于騰訊式的“三位一體&...  閱讀全文

          posted @ 2024-09-25 11:17 Jack Jiang 閱讀(277) | 評(píng)論 (0)編輯 收藏

          ► 相關(guān)鏈接:

          一、技術(shù)準(zhǔn)備

          您是否已對(duì)Web端即時(shí)通訊技術(shù)有所了解?

          您需要對(duì)WebSocket技術(shù)有所了解:

          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è)

          [2] MobileIMSDK開源框架的API文檔

          [3] MobileIMSDK開源IM框架源碼Github地址點(diǎn)此

          [4] MobileIMSDK-H5端基本介紹

          [5] MobileIMSDK-H5端的開發(fā)手冊(cè)(* 精編PDF版)

          [6] MobileIMSDK的Demo使用幫助:Server端

          [7] WebSocket從入門到精通,半小時(shí)就夠!

          posted @ 2024-09-19 13:14 Jack Jiang 閱讀(84) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共50頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 8 9 下一頁(yè) Last 
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 长宁区| 宁武县| 屏山县| 河津市| 宜章县| 宣威市| 邹平县| 汾西县| 新干县| 榆中县| 左云县| 襄樊市| 兴义市| 刚察县| 乐清市| 江山市| 科尔| 栾城县| 邯郸县| 万全县| 满城县| 昌宁县| 蓝田县| 南澳县| 武城县| 朝阳市| 关岭| 茶陵县| 定襄县| 洛阳市| 塔河县| 海安县| 泾川县| 清丰县| 清镇市| 松桃| 梅河口市| 米泉市| 太仆寺旗| 铅山县| 西林县|