菜鸟日记(yzy) 微信公众号网页的开发-websocket
由于我们公司要做的微信的H5页面是用来控制设备的,因此,与公司服务器不单单要进行http的通信,而且要实
现双工的网络通络方式,http当然就是用的JQuery的ajax方法,进行jsonp类型数据的获取方式,而在长连接方面我选
择了websocket的web技术来实现,其实websocket的代码其实相当的少,首先创造webSocket实例,代码:var ws =
new WebSocket("ws://hostlocal:8080"),其实websocket中的url可以当成tcp socket中的ip和port,然后就可以执行方法
ws.onopen作为一个用于连接打开事件的事件监听器,ws.onmessage是用来监听服务器返回的数据,ws.onclose监听
websocket是否关闭,这些都没有什么好讲的,照着搬砖就可以了。我在websocket上的主要问题是websocket既然是
基于TCP来实现的,与TCP具有一样的三次握手协议,那么websocket的客户端是否可用于基于TCP的服务器,
因为,我们公司是把APP项目移植到微信H5上,服务器上的长连接代码是现成的,所以,首先来进行了一下测试。第
一次测试时,我将16进制的协议包发送给服务器,没想到真成功了,TCP的服务器的确连上了客户端,但是但我们解
析我发送的协议包时,发现发送过来的数据并不正确,并且H5上并没有监听到连接,于是,我第二次发送了String类
型数据,服务器上获取的的数据没有发生变化。数据如下:47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A,
通过解析byte并通过ascll码发现显示为字符串为:GET / HTTP1.1 CRLF,到处看文档发现websocket虽然封装了
TCP,但是在三次握手后,客户端还要通过发送http协议传送WebSocket支持的版本号等信息,最后服务器返回相关
信息两者才能进行长连接(地址:http://blog.csdn.net/u014316363/article/details/43408325),如图:
补充:
其中,http协议最关键的是如何将Sec-webSocket-Key通过SHA1和Base64加密转换成Sec-webSocket-accept发送数据,其中mina框架的TCP对接Websocket中Sec-webSocket-Key的加密代码为:
public class keyUnit {
public Logger log = Logger.getLogger(keyUnit.class);
public static String getAccept(String key){
String mask = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
String accept = key + mask;
StringBuilder sb = new StringBuilder();
try{
MessageDigest mdDigest = MessageDigest.getInstance("SHA-1");
mdDigest.update(accept.getBytes("utf-8"),0,accept.length());
byte[] shalHash = mdDigest.digest();
System.out.println(bytesToHexString(shalHash));
accept = base64Encode(shalHash);
System.out.println(accept);
}catch(Exception e){
e.printStackTrace();
}
String rtn = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "
+ accept + "\r\n\r\n";
return accept;
}
public static String base64Encode(byte[] bytes){
return new String(Base64.encode(bytes));
}
public static String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
}
参考博客:http://147175882.iteye.com/blog/1586724
end
菜鸟日记(yzy) 微信公众号网页的开发-websocket相关推荐
- 微信公众号网页授权开发
1.配置公众号信息 2.spring-boot yml配置 server:port: 80 #端口由脚本配置## 微信公众号授权 wx:mp:app-id: APPIDsecret: SECRETto ...
- 微信公众号网页 H5 video 标签自动播放
目录 微信公众号网页 H5 video 标签自动播放 问题描述 解决方案 微信公众号网页 H5 video 标签自动播放 环境:微信公众号网页 需求:H5 video 标签自动播放视频 video 标 ...
- 基于Thinkphp5+EasyWeChat+fastadmin微信小程序授权登录获取手机号微信公众号网页---联合授权登录
战前准备 1.使用 composer 安装 EasyWeChat $ composer require overtrue/wechat:~4.0 -vvv 或者在composer.json文件renq ...
- 微信公众号网页授权--前端获取code及用户信息(vue)
前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的踩坑填坑之路. 一.测试号相关配置 首先在你公司申请的测试号上配置好相关信息 ...
- 微信公众号网页授权--前端获取code及用户信息(vue)【简单详细版】
嗨喽大家好,前段时间开发微信公众号网页授权,虽然网上已经有很多关于这方面的博客或者教程,但是第一次开发还是遇到挺多坑的,以下分享一下我的遇到的一些问题的见解,希望对你们有帮助. 一.测试号相关配置 首 ...
- php公众号开发配置网页域名,微信公众号网页开发授权配置流程
1.配置 1.1 公众号配置 1.2 开发者账号配置 选择开发者工具->web开发者工具->绑定开发者微信账号. 1.3 开发域名配置 选择公众号设置->功能设置,根据需求设置:业务 ...
- 前端对接微信公众号网页开发流程,前期配置
微信公众号网页开发,其实就是我们开发的h5网页需要放到微信浏览器环境中使用,但是需要对接公众号授权,授权之后可以获取到用户的个人信息,以及可以使用公众号提供的一些API,如:图片上传.图片预览.获取位 ...
- 前端对接微信公众号网页开发流程,授权对接
前面讲到 前端对接微信公众号网页开发流程,前期配置,本篇文章主要详细介绍关于公众号的授权对接. 一.引入微信js-sdk 在需要调用 JS 接口的页面引入如下 JS 文件 http://res.wx. ...
- 微信公众号网页授权思路解析及具体代码
微信公众号网页授权思路解析及具体代码 微信开发文档 实现方式也是两种: 1.静默授权登录 授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静 ...
- uniapp开发微信公众号网页-微信JSSDK使用
uniapp开发微信公众号网页-微信JSSDK使用 一. 安装jweixin-module 二. 新建js文件,把jssdk的接口简单封装,然后挂载到vue实例 1. 在js公共文件夹下创建wecha ...
最新文章
- Codeforces 300E(数学)
- 基于生成对抗网络(GAN)的人脸变形(附链接) | CSDN博文精选
- OpenCV On Android
- 第十六课.基于K-means的图像分割
- Xshell6和Xftp下载地址,rzsz的使用
- 【采用】反欺诈之血缘关系分析和犯罪传导监测 - 知识图谱
- 牛客网——最简真分数
- 求f(x,n)(信息学奥赛一本通-T1166)
- List<?> list= new ArrayList<?>接口引用指向实现类的对象.
- 请注意调整好自己的心态
- ipad分屏大小怎么调整_flash怎么调整元素大小-Adobe flash统一图形大小的方法
- 浅谈RNN、LSTM + Kreas实现及应用
- 百度Android在线语音识别SDK用法
- ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware
- ORACLE中的KEEP()使用方法
- 数值计算笔记之数值积分(一)
- I/O函数 writel __raw_writel mb()/rmb()/wmb()
- Symbol - 看似平凡的Symbol其实我们每天都在用 - 对象操作
- [附源码]Java计算机毕业设计SSM大学生运动员健康管理系统
- 文化产业如何面对大数据时代
热门文章
- 高效解答二进制数“多异或”和“多同或”连续运算问题
- 微信H5域名被屏蔽被拦截的最新解决方案(微信域名防投诉)
- C语言用数组模拟实现栈(LIFO)
- 极客也可以很亲民,酷炫设计、多变造型的华为智能眼镜即将发布
- 支持笔锋效果的手写签字控件
- WGL中的Scan信息的解析
- 根据页面结构,用jquery取里面对应的内容 组装成json数据
- 漫画:用木兰从军说外观模式
- 罗振宇2021跨年演讲5:为什么你要建成自己的“黄鹤楼”?
- servlet+js实现首页、尾页、下一页、上一页(翻页功能)