AndRroid实现基于Java-webSocket的长链接

来源:互联网 发布:制作精美ppt的软件 编辑:程序博客网 时间:2024/05/20 02:23

看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议。它是实现了浏览器与服务器全双工通信(full-duplex)。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。
我们实现长链接如果不想自己写,可以使用第三方的开源框架来帮助我们实现,目前比较流行的主要是:
1.基于Java-WebSocket实现长链接
2.基于OkHttp实现长链接
两者的实现方法基本相同,我使用的是java-websocket,具体选择哪个大家可以根据需要自行选择。大家可以访问下面链接去下载java-websocket jar包或者添加依赖。
1.jar包地址:http://download.csdn.net/detail/qq_35980424/9889035
2.github地址:https://github.com/TooTallNate/Java-WebSocket
WebSocketUtils工具类:

public class WebSocketUtils {    //WebSocketClient 和 address    private WebSocketClient mWebSocketClient;    //8585为端口号,根据情况修改    private final String address = "websocket://请求的ip地址:8585";    /**初始化WebSocketClient     * @throws URISyntaxException     */    public void initSocketClient() throws URISyntaxException {        if(mWebSocketClient == null) {            mWebSocketClient = new WebSocketClient(new URI(address)) {                @Override                public void onOpen(ServerHandshake serverHandshake) {                    Log.e("aaaa", "链接成功");                }                @Override                public void onMessage(String s) {                    //服务端消息                    Log.e("aaaa", "服务器返回了" + s);                }                @Override                public void onClose(int i, String s, boolean remote) {                    //连接断开,remote判定是客户端断开还是服务端断开                    if (remote) {                        Log.e("aaaa", "服务器断开链接了");                    } else {                        Log.e("aaaa", "客户端断开链接了");                    }                }                @Override                public void onError(Exception e) {                    Log.e("aaaa", "错误"+e.getMessage());                }            };        }    }    //连接    public void connect() {        new Thread(){            @Override            public void run() {                mWebSocketClient.connect();            }        }.start();    }    //关闭连接    public void closeConnect() {        try {            mWebSocketClient.close();        }        catch(Exception e) {            e.printStackTrace();        }        finally {            mWebSocketClient = null;        }    }    /**     *发送消息     */    public void sendMsg(String msg) {        mWebSocketClient.send(msg);    }}

我们通常会在Appliction中初始化连接,执行如下方法

/**     * 初始化socket     */    public void initSoctet() {        socketConnect = new WebSocketUtils();        //长连接初始化        try {            socketConnect.initSocketClient();            //开始长连接            socketConnect.connect();        } catch (URISyntaxException e) {            e.printStackTrace();        }    }

如果链接成功会打印出“连接成功”,这时我们就可以调用sendMsg(String msg)方法向服务器发送消息,如果发送成功,我们可以在下面的方法中接收到服务器返回的消息

@Overridepublic void onMessage(String s) {    //服务端消息    Log.e("aaaa", "服务器返回了" + s);}

最后记得调用closeConnect()方法关闭连接,释放系统资源。