基於Socket.IO實現Android聊天功能

silencezwm發表於2019-03-04


一、簡述

Socket.IO是一個完全由JavaScript實現、基於Node.js、支援WebSocket的協議用於實時通訊、跨平臺的開源框架,它包括了客戶端的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/"
複製程式碼

根據伺服器地址,例項化Socket物件:

Socket mSocket = IO.socket(CHAT_SERVER_URL, options);
複製程式碼

其中options是可供使用者選擇的一些配置引數,部分配置如下:

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

2.3 註冊監聽

在這裡我們就需要註冊一些監聽事件,用來監聽Socket通訊過程中產生的一些行為,比如以下是註冊Socket連線成功後的監聽回撥:

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

            }
        };
socket.on(Socket.EVENT_CONNECT, connectListener);
複製程式碼

2.4 通過Socket物件建立連線

至此,我們的管道鋪設工作就已經完成了,接下來我們只需要開啟管道的開關,那麼客戶端與伺服器之間就可以互通互信:

mSocket.connect();
複製程式碼

那我們要如何知道兩者之間是否已經連線成功了呢?沒錯,在2.3 我們註冊過監聽,一旦Socket連線成功,就會觸發該回撥,此時我們就可以根據專案的實際需求來做相應的處理了。

2.5 簡單使用

此時,如果我們要向伺服器傳送訊息,要怎麼實現呢?Socket.IO提供瞭如下操作:

mSocket.emit("new message", content);
複製程式碼

還可以這樣:

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

2.6 管道的銷燬

當我們不想再使用管道的時候,就需要把管道給銷燬,很簡單,我們只需要斷開連線以及登出監聽即可:

mSocket.disconnect();
mSocket.off(Socket.EVENT_CONNECT, connectListener);
複製程式碼

好啦,Socket.IO整個通訊過程就完成啦,於我們而言,是不是簡單易用。

三、完整原始碼奉上

不知該部分是不是眾望所歸(哈哈~),該份原始碼是基於Socket.IO官方的伺服器地址結合實際專案融合而成,擴充套件性極強,特分享出來,供各位參考。

基於Socket.IO實現Android聊天功能

最後,感謝你的到來,恭喜你,堅持到了最後,該文和原始碼若有不當之處,請予以斧正。



相關文章