Android 使用WebSocket實(shí)現(xiàn)即時(shí)通訊功能,聊天功能

之前做這個(gè)功能,記錄一下。即時(shí)通訊(Instant Messaging)最重要的毫無(wú)疑問(wèn)就是即時(shí),不能有明顯的延遲,要實(shí)現(xiàn)IM的功能其實(shí)并不難,目前有很多第三方,比如極光的JMessage,都比較容易實(shí)現(xiàn)。但是如果項(xiàng)目有特殊要求(領(lǐng)導(dǎo)不愿意花這份錢(qián)),那就得自己做了,所以我們需要使用WebSocket。

一.Android實(shí)現(xiàn)即時(shí)通訊功能

1.引入WebSock依賴(lài)

implementation "org.java-websocket:Java-WebSocket:1.4.0"

2.創(chuàng)建一個(gè)java類(lèi)并繼承WebSocketClient

public class JWebSocketClient extends WebSocketClient {
    public JWebSocketClient(URI serverUri) {
        super(serverUri, new Draft_6455());
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {
        Log.e("JWebSocketClient", "onOpen()");
    }

    @Override
    public void onMessage(String message) {
        Log.e("JWebSocketClient", "onMessage()");
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        Log.e("JWebSocketClient", "onClose()");
    }

    @Override
    public void onError(Exception ex) {
        Log.e("JWebSocketClient", "onError()");
    }
}

其中onOpen()方法在websocket連接開(kāi)啟時(shí)調(diào)用,onMessage()方法在接收到消息時(shí)調(diào)用,onClose()方法在連接斷開(kāi)時(shí)調(diào)用,onError()方法在連接出錯(cuò)時(shí)調(diào)用。構(gòu)造方法中的new Draft_6455()代表使用的協(xié)議版本,這里可以不寫(xiě)或者寫(xiě)成這樣即可。

3.建立連接

URI uri = URI.create("ws://*******");  //后臺(tái)給的一個(gè)websocket 的路徑
JWebSocketClient client = new JWebSocketClient(uri) {
    @Override
    public void onMessage(String message) {
        //message就是接收到的消息
        Log.e("JWebSClientService", message);
    }
};

二.如果只需要接收服務(wù)器傳過(guò)來(lái)的消息

String url = "ws://jsh.yitian-tech.com:19012/api/websocket/" + id;
//url是后臺(tái)給的socket的路徑
                try {
                    Socket socket = new Socket(url,8888);
                    InputStream is = socket.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isr);
                    String data1 = null;
                    //讀取客戶(hù)端數(shù)據(jù)
                    while((data1 = br.readLine()) != null){
                        System.out.println("客戶(hù)端接收到服務(wù)器回應(yīng)的數(shù)據(jù):" + data);
                    }
                    //關(guān)閉輸入流
                    socket.shutdownInput();
                    //關(guān)閉資源
                    br.close();
                    isr.close();
                    is.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容