https://blog.csdn.net/lecepin/article/details/54632749

实例内容

今天主要说一下微信的WebSocket接口以及在小程序中的使用。


WebSocket是什么(简述)

微信的WebSocket接口和HTML5的WebSocket基本一样,是HTTP协议升级来的,做为一个新的Socket在B/S上使用,它实现了浏览器与服务器全双工通信。

因为这里是做小程序,所以就不对WebSocket的底层和协议做过多的说明了,只是稍微介绍一下。想了解详细的WebSocket可以参考如下:

WebSocket 协议


WebSocketAjax 的选择

WebSocket出来之前,实现即时通讯通常使用Ajax来实现,而Ajax是通过轮询的方式进行实时数据的获取,轮询就是在指定的时间间隔内,进行HTTP 请求来获取数据,而这种方式会产生一些弊端,一方面产生过多的HTTP请求,占用带宽,增大服务器的相应,浪费资源,另一方面,因为不是每一次请求都会有数据变化(就像聊天室),所以就会造成请求的利用率低。

WebSocket正好能够解决上面的弊端,WebSocket是客户端与服务器之前专门建立一条通道,请求也只请求一次,而且可以从同道中实时的获取服务器的数据,所以当应用到实时的应用上时,WebSocket是一个很不错的选择。


WebSocket协议名

WebSocket的链接不是以httphttps开头的,而是以wswss开头的,这里需要注意一下。


实例:实时显示交易信息

这里类似于实时查看股票信息,这里用到了图表插件wxchart

wxchart插件地址:插件下载

基本说的差不多了,正式开始。

添加stock页面:

wxchart.js放入到pages/stock/中。

修改stock.wxml

stock.js代码:

// pages/stock/stock.js
//加载插件
var wxCharts = require('wxcharts.js'); Page({ data: {}, onLoad: function (options) { //建立连接 wx.connectSocket({ url: "ws://localhost:12345", }) //连接成功 wx.onSocketOpen(function() { wx.sendSocketMessage({ data: 'stock', }) }) //接收数据 wx.onSocketMessage(function(data) { var objData = JSON.parse(data.data); console.log(data); new wxCharts({ canvasId: 'lineCanvas',//指定canvas的id animation: false, type: 'line',//类型是线形图 categories: ['2012', '2013', '2014', '2015', '2016', '2017'], series: [{ name: '交易量', data: objData,//websocket接收到的数据 format: function (val) { if (typeof val == "string") { val = parseFloat(val); } return val.toFixed(2) + '万元'; } }, ], yAxis: { title: '交易金额 (万元)', format: function (val) { return val.toFixed(2); }, min: 0 }, width: 320, height: 200 }); }) //连接失败 wx.onSocketError(function() { console.log('websocket连接失败!'); }) }, })

这里WebSocket的地址是ws://localhost,端口是12345,连接成功后,向服务器发送stock,然后服务器向小程序提供数据信息。

WebSocket的服务器端我是用PHP写的,这里贴一下,大家可以参考一下:

<?php
include 'WebSocket.php';class WebSocket2 extends WebSocket{ public function run(){ while(true){ $socketArr = $this->sockets; $write = NULL; $except = NULL; socket_select($socketArr, $write, $except, NULL); foreach ($socketArr as $socket){ if ($socket == $this->master){ $client = socket_accept($this->master); if ($client < 0){ $this->log("socket_accept() failed"); continue; }else{ $this->connect($client); } } else{ $this->log("----------New Frame Start-------"); $bytes = @socket_recv($socket,$buffer,2048,0); if ($bytes == 0){ $this->disconnect($socket); }else{ $user = $this->getUserBySocket($socket); if (!$user->handshake){ $this->doHandShake($user, $buffer); }else{ $buffer = $this->unwrap($user->socket, $buffer); //请求为stock时,向通道内推送数据 if ($buffer == 'stock') { $arr = array(); //模拟数据 for ($i=0; $i < 6; $i++) { $arr[] = rand(1, 100) / 100; } $this->send($user->socket, json_encode($arr)); } } } } } } } } $s = new WebSocket2('localhost', 12345); $s -> run();

用PHP写WebSocket稍微有些麻烦,懂Node.js的可用Node.js写一下,Node.js写后端的WebSocket很方便。

上面用到的WebSocket.php代码:代码下载

实例效果:


微信WebSocketAPI参数说明

wx.connectSocket(OBJECT)

参数 类型 必填 说明
url String 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名
data Object 请求的数据
header Object HTTP Header , header 中不能设置 Referer
method String 默认是GET,有效值为: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

wx.onSocketOpen(CALLBACK)

监听WebSocket连接打开事件。

wx.onSocketError(CALLBACK)

监听WebSocket错误。

wx.sendSocketMessage(OBJECT)

通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。

参数 类型 必填 说明
data String/ArrayBuffer 需要发送的内容
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

wx.onSocketMessage(CALLBACK)

监听WebSocket接受到服务器的消息事件。

参数 类型 说明
data String/ArrayBuffer 服务器返回的消息

wx.closeSocket()

关闭WebSocket连接。

wx.onSocketClose(CALLBACK)

监听WebSocket关闭。


关于localhost

这里说明一下localhost,上述代码中我用到了localhost的本地请求,这里只是占位使用,在程序编写中是不支持localhost本地请求的,这里大家要注意一下。

转载于:https://www.cnblogs.com/dianzan/p/8990625.html

WebSocket 时时双向数据,前后端(聊天室)相关推荐

  1. SpringBoot——SpringBoot集成WebSocket实现简单的多人聊天室

    文章目录: 1.什么是WebSocket? 2.Java中的WebSocket API 2.1 WebSocket开发中的相关注解及API方法 2.2 前端技术对WebSocket的支持 3.多人聊天 ...

  2. 详解 WebSocket 原理,附完整的聊天室实战 Demo

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:nnngu cnblogs.com/nnngu/p/9347635.html 1.前 ...

  3. 【系统开发】WebSocket + SpringBoot + Vue 搭建简易网页聊天室

    文章目录 一.数据库搭建 二.后端搭建 2.1 引入关键依赖 2.2 WebSocket配置类 2.3 配置跨域 2.4 发送消息的控制类 2.5 R类 三.前端搭建 3.1 自定义文件websock ...

  4. WebSocket请求过程分析及实现Web聊天室

    WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...

  5. 【javascript】基于websocket、nodejs、uniapp的聊天室

    本文基于websocket,nodejs,uniapp技术栈开发了一个简易聊天室,可以进行简单的群聊和单聊的功能. 登陆后在聊天大厅可以进行群聊 查看当前在线用户 选择指定在线用户进行单聊 项目地址: ...

  6. Java websocket + redis 实现多人单聊天室,多人多聊天室, 一对一聊天

    多人,单聊天室版 FEATURE 多人聊天, 界面简洁美观, 使用ueditor支持发送文字,图片信息 群聊成员列表, 登入登出公告 存储聊天记录, 查看历史消息 技术点 使用CopyOnWriteM ...

  7. 为什么websocket没有被广泛使用,他解决了前后端数据没有实时刷新的问题,原因来了。

    为什么接口不全部采用websocket,最近在开发一个项目,里面有im实时聊天,用到了websocket,而我仅仅是聊天室用了,其他聊天记录已经人员邀请创建群里采取的都是http请求,数据需要实时交互 ...

  8. WebSocket原生JavaScript实现简易聊天室

    WebSocket原生实现 WebSocket-Vue2 WebSocket-Vue3 基本介绍 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. Web ...

  9. websocket + node 手把手实现简陋聊天室

    在这一篇文章中,我将会先对 websocket 做一个简单的介绍:然后使用 node + websocket 做一个极其简陋的聊天室:最后在将这个简陋的聊天室通过 websocket 框架 -- so ...

  10. WebSocket 入门:简易聊天室

    大家好,我是前端西瓜哥,今天我们用 WebSocket 来实现一个简单的聊天室. WebSocket 是一个应用层协议,有点类似 HTTP.但和 HTTP 不一样的是,它支持真正的全双工,即不仅客户端 ...

最新文章

  1. 2022-2028年中国橡胶手套行业市场研究及前瞻分析报告
  2. python爬取网页上的特定链接_python3下scrapy爬虫(第三卷:初步抓取网页内容之抓取网页里的指定数据)...
  3. Python 重写父类方法
  4. 设计模式的概念和分类
  5. css限制字体三行_讲道理,仅3行核心css代码的rate评分组件,我被自己秀到头皮发麻...
  6. HDU 2296 Ring -----------AC自动机,其实我想说的是怎么快速打印字典序最小的路径...
  7. 视频画面帧的展示控件SurfaceView及TextureView对比
  8. Atitit tomcat 启动报错 ZipException: archive is not a ZIP archive. 1.1. ----Should sh lib jar err... 1
  9. 用友U8审批流相关开发
  10. 计算机维修工具大全,电脑硬件维修测试工具大全(附送各类PC检修资源)
  11. 【C++常用函数】isalpha、isalnum、isdigit、islower、isupper用法
  12. 牛客小白月赛2 H 武 【Dijkstra】
  13. [转]C#中的global关键字(global::)
  14. Redis-6.2.* 版本配置文件redis.conf详解
  15. kdb+q一个入库和删除的小demo
  16. 从python’s revenge看python反序列化
  17. 儿童护眼灯怎么选?护眼灯合格的品牌推荐
  18. 使用word2vec分析新闻标题并预测文章流行度
  19. 腾讯T3大佬亲自教你!dockercommit打包镜像
  20. ubuntu22从双系统开始到深度学习环境搭建+必备软件安装

热门文章

  1. mysql隐式锁_innodB的隐式锁
  2. python列表元组字典集合实验心得_python心得 元组,字典,集合
  3. python序列类型唯一的映射类型_什么是python中唯一的映射类型
  4. mysql_store_result和mysql_use_result
  5. 湘潭大学计算机考研调剂,2017年湘潭大学硕士研究生调剂信息公告
  6. 超市对账源码php_[源码和文档分享]基于Java的在线购物系统的设计与实现
  7. hdoj1003+codeup2086:Max Sum最大连续子序列和(dp基础题+dp入门-----分治/遍历求和/dp)
  8. java调用一个外部url_java 从程序内部调用外部url/接口
  9. 线性代数 : 矩阵消元
  10. 从Xcode中的动态库中剥离不需要的架构 Submit to App Store issues: Unsupported Architecture X86_64, i386