一、簡述
Socket.IO是一個完全由JavaScript實現、基於Node.js、支援WebSocket的協議用於實時通訊、跨平臺的開源框架,它包括了客戶端的JavaScript和伺服器端的Node.js。
該種官方介紹看起來有點懵逼,簡而言之就是:
客戶端可通過Socket.IO與伺服器建立實時通訊管道
複製程式碼
二、應用
該下就是介紹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官方的伺服器地址結合實際專案融合而成,擴充套件性極強,特分享出來,供各位參考。
最後,感謝你的到來,恭喜你,堅持到了最後,該文和原始碼若有不當之處,請予以斧正。