美文网首页
websocket 解析

websocket 解析

作者: heiheiwanne | 来源:发表于2017-04-19 10:55 被阅读87次

websocket:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。

  • 首先需要知道:websocket 底下也是socket 比如okhttp httpURLconnection 都是socket ;屏幕熄灭一段时间后,Socket就被断开。屏幕开启的时候需进行重连,但每次看Log的时候又发现网络是链接的,后来才发现是cpu休眠导致链接被断开,当你插上数据线看log的时候,网络cpu恢复,一看网络确实是链接的,网上有使用:PARTIAL_WAKE_LOCK,保持CPU不休眠。
 PowerManager pm = (PowerManager) context.getSystemService(POWER_SERVICE);// init powerManager
//            mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_DIM_WAKE_LOCK,"target");
        mWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "pollingservice");
mWakelock.acquire();

这里是用了AlarmManager 进行启动service ,但是在5.0以上的系统闹钟为1分钟一次,不可控,所以是用了service 开启线程处理

  • 其中有遇到过RSA 加密的问题,发现Android端这边总是不能跟Java那边匹配,最后发现是Android这边跟Java那边的标准是不一样的,android系统的RSA实现是"RSA/None/NoPadding",而标准JDK实现是"RSA/None/PKCS1Padding"
 public static String encryptByPrivateKey(String data) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidKeySpecException, BadPaddingException, IllegalBlockSizeException {
        int keyIndex = Calendar.getInstance().get(Calendar.YEAR) - 2017;
        keyIndex = keyIndex >= keyPrivateArray.size()?keyPrivateArray.size()-1:keyIndex;
        byte[] bytes = Base64.decode(keyPrivateArray.get(keyIndex),Base64.DEFAULT);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(bytes);

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPrivateKey privateK = (RSAPrivateKey)keyFactory.generatePrivate(pkcs8KeySpec);
        Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding"); //这里要跟java的RSA 标准一致

        cipher.init(Cipher.ENCRYPT_MODE, privateK);
        // 加密数据长度 <= 模长-11
        String[] datas = splitString(data,privateK.getModulus().bitLength()/8-11);
        String mi = "";
        //如果明文长度大于模长-11则要分组加密
        for (String s : datas) {
            mi += bcd2Str(cipher.doFinal(s.getBytes()));
        }
        return mi;
    }
ELAPSED_REALTIME:表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始)。
ELAPSED_REALTIME_WAKEUP: 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间。
RTC:表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用绝对时间(即系统时间)。当系统调用System.currentTimeMillis()方法的返回值与triggerAtTime相等时启动operation所对应的组件。
RTC_WAKEUP:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用绝对时间。
  • 心跳包的时间可以改为2 3 5 7 这种增时发送的方式
    开启两个端口进行轮询启动,一个断开,链接另一个。
    源码链接:WebSocketDemo

参考: 关于socket长连接的心跳包
android设备休眠
RSA加密解密坑
Android 关于休眠的几个坑点

相关文章

  • Nginx 配置WSS 解析与实战

    Nginx 配置WSS 解析与实战 1. 几个关键概念 1.1 WebSocket WebSocket 协议是 h...

  • WebSocket解析

    1. WebSocket是什么? WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSock...

  • websocket 解析

    websocket:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-...

  • websocket

    websocket深入探究不过语言不是php.目前解析数据帧还有些问题~

  • Websocket 协议解析

    原文在:http://www.king-liu.net, 欢迎大家来 WebSocket protocol 是HT...

  • WebSocket协议解析

    现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HT...

  • WebSocket 语法解析

    WebSocket

  • 快速入门SpringMVC

    体系概述 注解驱动的控制器 处理方法的数据绑定 视图和视图解析器 本地化解析 文件上传 webSocket支持 杂...

  • WebSocket 经典解析(转)

    作者:Ovear 链接:https://www.zhihu.com/question/20215561/answe...

  • 杂图

    来自网络图片: DNS域名解析过程: 前端优化性能的几个点: OSI、tcp/ip、websocket、socke...

网友评论

      本文标题:websocket 解析

      本文链接:https://www.haomeiwen.com/subject/uclqzttx.html