Android 使用WebSocket实现即时通讯功能,聊天功能

之前做这个功能,记录一下。即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易实现。但是如果项目有特殊要求(领导不愿意花这份钱),那就得自己做了,所以我们需要使用WebSocket。

一.Android实现即时通讯功能

1.引入WebSock依赖

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

2.创建一个java类并继承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连接开启时调用,onMessage()方法在接收到消息时调用,onClose()方法在连接断开时调用,onError()方法在连接出错时调用。构造方法中的new Draft_6455()代表使用的协议版本,这里可以不写或者写成这样即可。

3.建立连接

URI uri = URI.create("ws://*******");  //后台给的一个websocket 的路径
JWebSocketClient client = new JWebSocketClient(uri) {
    @Override
    public void onMessage(String message) {
        //message就是接收到的消息
        Log.e("JWebSClientService", message);
    }
};

二.如果只需要接收服务器传过来的消息

String url = "ws://jsh.yitian-tech.com:19012/api/websocket/" + id;
//url是后台给的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;
                    //读取客户端数据
                    while((data1 = br.readLine()) != null){
                        System.out.println("客户端接收到服务器回应的数据:" + data);
                    }
                    //关闭输入流
                    socket.shutdownInput();
                    //关闭资源
                    br.close();
                    isr.close();
                    is.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容