基于Socket.IO實現(xiàn)Android聊天功能



一吐葱、簡述

Socket.IO是一個完全由JavaScript實現(xiàn)、基于Node.js校翔、支持WebSocket的協(xié)議用于實時通信弟跑、跨平臺的開源框架,它包括了客戶端的JavaScript和服務器端的Node.js防症。

該種官方介紹看起來有點懵逼弄跌,簡而言之就是:

客戶端可通過Socket.IO與服務器建立實時通信管道
客戶端通過Socket.io與服務器建立通信通道.png

二袍冷、應用

該下就是介紹Socket.IO通信管道的鋪設办素、通信以及銷毀工作堪遂。

2.1 引入Socket.io包

compile 'io.socket:socket.io-client:0.8.3'

2.2 實例化Socket對象

服務器地址(該地址為Socket.IO官方測試地址粘舟,實際項目中請更換):

String CHAT_SERVER_URL = "https://socket-io-chat.now.sh/"

根據(jù)服務器地址迈倍,實例化Socket對象:

Socket mSocket = IO.socket(CHAT_SERVER_URL, options);

其中options是可供用戶選擇的一些配置參數(shù)缝龄,部分配置如下:

public static class Options extends io.socket.engineio.client.Socket.Options {
    // 是否自動重連
    public boolean reconnection = true;
    // 重連嘗試次數(shù)
    public int reconnectionAttempts;
    // 重連間隔
    public long reconnectionDelay;
    // 最大連接等待時間
    public long reconnectionDelayMax;
    // 連接超時時間 (ms)旺韭,設置為-1表示不超時
    public long timeout = 20000;
}

2.3 注冊監(jiān)聽

在這里我們就需要注冊一些監(jiān)聽事件础嫡,用來監(jiān)聽Socket通信過程中產(chǎn)生的一些行為指么,比如以下是注冊Socket連接成功后的監(jiān)聽回調:

Emitter.Listener connectListener;
connectListener = new Emitter.Listener() {
            @Override
            public void call(Object... args) {

            }
        };
socket.on(Socket.EVENT_CONNECT, connectListener);

2.4 通過Socket對象建立連接

至此,我們的管道鋪設工作就已經(jīng)完成了榴鼎,接下來我們只需要打開管道的開關伯诬,那么客戶端與服務器之間就可以互通互信:

mSocket.connect();

那我們要如何知道兩者之間是否已經(jīng)連接成功了呢?沒錯巫财,在2.3 我們注冊過監(jiān)聽盗似,一旦Socket連接成功,就會觸發(fā)該回調平项,此時我們就可以根據(jù)項目的實際需求來做相應的處理了赫舒。

2.5 簡單使用

此時,如果我們要向服務器發(fā)送消息闽瓢,要怎么實現(xiàn)呢接癌?Socket.IO提供了如下操作:

mSocket.emit("new message", content);

還可以這樣:

mSocket.emit("new message", content, new Ack() {
        @Override
        public void call(Object... args) {
            
        }
    });

2.6 管道的銷毀

當我們不想再使用管道的時候,就需要把管道給銷毀扣讼,很簡單缺猛,我們只需要斷開連接以及注銷監(jiān)聽即可:

mSocket.disconnect();
mSocket.off(Socket.EVENT_CONNECT, connectListener);

好啦,Socket.IO整個通信過程就完成啦椭符,于我們而言荔燎,是不是簡單易用。

三销钝、完整源碼奉上

不知該部分是不是眾望所歸(哈哈~)有咨,該份源碼是基于Socket.IO官方的服務器地址結合實際項目融合而成,擴展性極強曙搬,特分享出來摔吏,供各位參考鸽嫂。

基于Socket.IO實現(xiàn)Android聊天功能

最后,感謝你的到來征讲,恭喜你据某,堅持到了最后,該文和源碼若有不當之處诗箍,請予以斧正癣籽。



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市匠童,隨后出現(xiàn)的幾起案子埂材,更是在濱河造成了極大的恐慌,老刑警劉巖汤求,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俏险,死亡現(xiàn)場離奇詭異,居然都是意外死亡扬绪,警方通過查閱死者的電腦和手機竖独,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挤牛,“玉大人莹痢,你說我怎么就攤上這事∧垢埃” “怎么了竞膳?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竣蹦。 經(jīng)常有香客問我顶猜,道長,這世上最難降的妖魔是什么痘括? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任长窄,我火速辦了婚禮,結果婚禮上纲菌,老公的妹妹穿的比我還像新娘挠日。我一直安慰自己,他們只是感情好翰舌,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布嚣潜。 她就那樣靜靜地躺著,像睡著了一般椅贱。 火紅的嫁衣襯著肌膚如雪懂算。 梳的紋絲不亂的頭發(fā)上只冻,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音计技,去河邊找鬼喜德。 笑死,一個胖子當著我的面吹牛垮媒,可吹牛的內容都是我干的舍悯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼睡雇,長吁一口氣:“原來是場噩夢啊……” “哼萌衬!你這毒婦竟也來了?” 一聲冷哼從身側響起它抱,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤秕豫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抗愁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馁蒂,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡呵晚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年蜘腌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饵隙。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡撮珠,死狀恐怖,靈堂內的尸體忽然破棺而出金矛,到底是詐尸還是另有隱情芯急,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布驶俊,位于F島的核電站娶耍,受9級特大地震影響,放射性物質發(fā)生泄漏饼酿。R本人自食惡果不足惜榕酒,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望故俐。 院中可真熱鬧想鹰,春花似錦、人聲如沸药版。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽槽片。三九已至何缓,卻和暖如春肢础,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碌廓。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工乔妈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氓皱。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓路召,卻偏偏與公主長得像,于是被迫代替她去往敵國和親波材。 傳聞我的和親對象是個殘疾皇子股淡,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,744評論 25 707
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,312評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)廷区,斷路器唯灵,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 徐老子芳先生,著名作家隙轻、辭賦家埠帕。 帶領大家基層采風,無論冬夏玖绿、室內室外敛瓷,常著一頂鮮麗的棒球帽,休閑提神斑匪,格外醒目呐籽,...
    ebf56d3e9a20閱讀 354評論 1 3
  • 本文主要針對App的產(chǎn)品來進行測試,但萬變不離其宗蚀瘸,大家可以去參考下狡蝶。 測試要區(qū)分不同階段來進行,在產(chǎn)品設計時贮勃,開...
    windtony閱讀 2,371評論 4 14