Android WebSocketServer 服务端几行代码轻松实现

Android WebSocketServer

很多网上的方案都是实现android为客户端,但最近的需求是实现服务端,由于android资源有限,实现上:

1. 需要尽可能简单,不需要太多逻辑代码,开启服务端->接收消息;

2. 且实现后占用资源小,效率高越好,有一定并发性;

3. 实现门槛低,一看就会,有手就行的那种...

试过vertx,androidasync...等 但性能上表现的并不是很好,或者逻辑实现上让我有些丈二、

最终选用 org.java-Websocket  经过验证,性能较稳定,且较轻量级容易实现,满足我的需求

下面开始实现

Android WebSocketServer 服务端几行代码轻松实现_第1张图片

build.gradle中导入依赖,可以选用高版本,导入报错可以手动下载依赖放到lib中,我这边使用1.3.6版本

implementation group: 'org.java-websocket', name: 'Java-WebSocket', version: '1.3.6'

服务端实现代码,继承WebSocketServer,重写相关方法如下


    public class MyWebSocketServer extends WebSocketServer {
        MyWebSocketServer(InetSocketAddress host){
            super(host);
        }
        @Override
        public void onOpen(WebSocket conn, ClientHandshake handshake) {
            Log.d("websocket", "onOpen()一个客户端连接成功:"+conn.getRemoteSocketAddress());
        }
        @Override
        public void onClose(WebSocket conn, int code, String reason, boolean remote) {
            Log.d("websocket", "onClose()服务器关闭");
        }
        @Override
        public void onMessage(WebSocket conn, String message) {
            // 这里在网页测试端发过来的是文本数据 测试网页 http://www.websocket-test.com/
            // 需要保证android 和 加载网页的设备(我这边是电脑) 在同一个网段内,连同一个wifi即可
            Log.d("websocket", "onMessage()网页端来的消息->"+message);
        }
        @Override
        public void onMessage(WebSocket conn, ByteBuffer message) {
            // 接收到的是Byte数据,需要转成文本数据,根据你的客户端要求
            // 看看是string还是byte,工具类在下面贴出
            Log.d("websocket", "onMessage()接收到ByteBuffer的数据->"+ByteUtil.byteBufferToString(message));
        }
        @SneakyThrows
        @Override
        public void onError(WebSocket conn, Exception ex) {
            // 异常  经常调试的话会有缓存,导致下一次调试启动时,端口未关闭,多等待一会儿
            // 可以在这里回调处理,关闭连接,开个线程重新连接调用startMyWebsocketServer() 
            Log.e("websocket", "->onError()出现异常:"+ex);
        }
        @Override
        public void onStart() {
            Log.d("websocket", "onStart(),WebSocket服务端启动成功");
        }
    }

    MyWebSocketServer myWebsocketServer;
    // 实现方法,在服务中或者OnCreate()方法调用此方法
    public void startMyWebsocketServer() {
        // 192.168.1.101为安卓服务端,需要连接wifi后 高级选项ip设置为静态,输入自定义地址
        // 方便客户端 找 服务端,不需要用getHostAddress等,可能连接不上
        // 9090为端口
        InetSocketAddress myHost = new InetSocketAddress("192.168.1.101", 9090);
        myWebsocketServer = new MyWebSocketServer(myHost);
        myWebsocketServer.start();
    }

没了,就这么实现了...附加,放上工具类...

public class ByteUtil {
    public static String byteBufferToString(ByteBuffer buffer)
    {
        CharBuffer charBuffer = null;
        try {
            Charset charset = Charset.forName("UTF-8");
            CharsetDecoder decoder = charset.newDecoder();
            charBuffer = decoder.decode(buffer);
            buffer.flip();
            return charBuffer.toString();
         } catch (Exception ex)
            {
                ex.printStackTrace();
                 return null;
            }
    }
}

 

你可能感兴趣的:(Android WebSocketServer 服务端几行代码轻松实现)