版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31588719/article/details/70945765
前段时间公司在做的一个项目,需要实时获取到最新的行情数据,行情数据每秒更新,当时考虑过用轮询方式获取,但是稍微推敲,很是不妥。当用户量多了,每个客户端都要去轮询服务器,给服务器造成的压力很大大,而且用户的体验也不好,频繁的请求也会导致手机发热,电量耗得很快。后来方案是:搭建一个webSocket中转服务器去做轮询拿到数据,然后将数据进行分发。后台的哥们搭好webSocket服务器后,给了一个链接地址,格式是ws://xxx.xxx.xxx:端口号。我通过导入一个jar包,调用相关的api进行了链接。
WebSocketConnection connection = new WebSocketConnection(); //创建WebSocket链接对象 connection.connect(WEBSCOKET_IP,webSocketHandler);//调用connect链接方法,第一个参数为链接地址 第二个参数为回调对象 WebSocketHandler webSocketHandler = new WebSocketHandler() {//回调对象,重写三个重要的方法. @Override public void onOpen() {//这个方法为打开连接时会走,即刚开始建立链接,可在这里向服务器发送数据(具体看个人需求 super.onOpen(); connection.sendTextMessage("data");//调用此方法向服务器发送数据,也可以发送字节数组 } Override public void onTextMessage(String payload) {//这个是建立链接后接收到数据会回调的方法 super.onTextMessage(payload); //数据都在这个参数payload里面,这里就拿到了数据, Log.e("data", payload); //当然,心跳包也会在这里,可在这判断下,是我们有用的数据就解析、处理,心跳包就不管 } Override public void onClose(int code, String reason) {//见名知意,这个就是与webSocket断开链接后的 回调的方法,参数里面带了错误的信息和状态码 super.onClose(code, reason); Log.e("data", "code" + code + "reason" + reason); } 这样就让安卓与WebSocket建立了长链接,看,是不是很简单。至于jar包这里不能添加附件,需要的直接回复邮箱我直接发。