socket closed是什么意思_socket请求
在之前的文章中我们所提到的文件的上传和下载以及request请求都是基于http请求的。小程序也给我们提供了另一种通讯方式是基于websocket请求的,那么http请求和websocket它们之间的含义以及有什么什么不同呢?下来就让我们一起来看下吧:
我们可以看到http协议呢是基于TCP/IP通信协议通过万维网服务器传输数据到本地浏览器的应用层协议;websocket是由HTML5规范提出的一种在单个TCP连接上进行全双工通信的应用层协议。在了解了两者的不同后,让我们来看下在小程序中是如何通过websocket进行数据传输的。
url是服务器的wss接口地址,header表示了http header,protocols表示了子协议数组。下面让我们通过一个实例来看下吧:
<!--index.wxml>
<view class="container"><view class="page-body"><view class="page-section"><view class="weui-cells weui-cells_after-title"><view class="weui-cell weui-cell_switch"><view class="weui-cell__bd">Socket状态</view><view class="weui-cell__ft"><switch bindchange="toggleSocket" checked="{{isOpen}}"/></view></view><view class="weui-cell"><view class="weui-cell__bd">消息</view><view class="weui-cell__ft">Hello, 小程序!</view></view></view></view><view class="btn-area"><button type="primary" size="40" bindtap="sendMessage" disabled="{{socketStatus != 'connected'}}" loading="{{loading}}">点我发送</button></view></view>
</view>
const tunnelUrl = require('../../../../../config').tunnelUrlfunction showModal(title, content) {wx.showModal({title,content,showCancel: false})
}function showSuccess(title) {wx.showToast({title,icon: 'success',duration: 1000})
}Page({data: {socketStatus: 'closed',isOpen: false,sendText: 'hello, 小程序'},socketMsgQueue: [],// 注册连接打开事件registerOpen() {wx.onSocketOpen((res) => {console.log('当前webscoket通道已打开并开始发送数据', res);this.sendAllMessage();this.setData({socketStatus: 'connected',isOpen: true});});},// 注册接受到websocket消息事件registerReceive() {wx.onSocketMessage(function (res) {console.log('收到服务器内容:' + res.data)})},// 注册socket出错事件registerError() {wx.onSocketError((res) => {this.setData({socketStatus: 'closed',isOpen: false})console.log('socket连接出错,原因是:', res);});},// 切换switch开关toggleSocket: function(e) {if(e.detail.value) {wx.connectSocket({url: tunnelUrl,protocols: ['echo-protocol'],success: (res) => {console.log('打开一个socket连接',res);this.registerOpen();this.registerReceive();this.registerError();}});} else {wx.closeSocket({success: (res) => {console.log('关闭socket连接: ', res);wx.onSocketClose((res) => {console.log('当前socket通道已关闭', res);this.setData({socketStatus: 'closed',isOpen: false});})},fail: (res) => {console.log('关闭socket通道出错,原因是:', res);},complete: (res) => {console.log('操作完成!')}});}},// 点击按钮发送消息sendMessage: function() {let text = this.data.sendText;this.sendSingleMessage(text+Math.random()*100);},// 发送单条websocket消息sendSingleMessage: function(text) {let isOpen = this.data.isOpen;if (isOpen) {wx.sendSocketMessage({data: text})} else {this.socketMsgQueue.push(text)}},// 发送队列所有websocket消息sendAllMessage: function() {for (var i = 0; i < this.socketMsgQueue.length; i++) {this.sendSingleMessage(this.socketMsgQueue[i])}this.socketMsgQueue = []}})
今天的内容就到这里了,我们下期再见。
socket closed是什么意思_socket请求相关推荐
- Unable to open debugger port (127.0.0.1:4184): java.net.SocketException socket closed
Unable to open debugger port (127.0.0.1:4184): java.net.SocketException "socket closed" ht ...
- 解决:Unable to open debugger port (127.0.0.1:55017): java.net.SocketException “Socket closed“
项目以前启动正常,突然报错,启动不起来了,报了个Unable to open debugger port (127.0.0.1:55017): java.net.SocketException &qu ...
- 解决jmeter压测试时java.net.SocketException: Socket closed异常
问题描述: jmeter压测时会报java.net.SocketException: Socket closed,如图所示: 解决办法: 1.implementation选择httpclient 4, ...
- Tomcat 启动报:socket closed,已解决
问题背景:正在项目debug,工具到期了,接着找破解码,重新启动项目发现报:socket closed...... 解决方案: 一.简单方法: 找到任务管理器(Ctrl+Alt+".&quo ...
- python 调试报错 Connection to Python debugger failed socket closed
python 调试报错 Connection to Python debugger failed socket closed 点击调试按钮报错,同时显示AttributeError: module ' ...
- Pycharm调试错误:连接 Python 调试器失败 Socket closed
pycharm点击工具栏的调试按钮时出现错误:连接 Python 调试器失败 Socket closed 首先采用以下方法: 选择左上角工具栏"file"→"settin ...
- java socket发送定长报文_socket编程
1.socket编程的概念 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请 ...
- java socket 如何设置so_keepalive属性_socket通信的KeepAlive设定
socket通信的KeepAlive默认时间是2小时,通过以下代码可以改变其时间,来检测socket通信过程中自网线,服务器网线断等事件 #include #include "winsock ...
- java socket长连接怎么维持_socket长连接的维持
import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date;/** * 维持连接的消息对 ...
最新文章
- android 稳定性测试工具,APP 稳定性测试工具-Fastbot_Android详解
- mysql代理中间件_MySQL-ProxySQL中间件(二)
- 【转】CAD2012打开自动关闭解决方法
- Git指南-Git-flow开发流程
- proxychains 使用指北
- print打印字符串之谜
- mapreduce 文件可以切分吗_MapReduce的任务流程
- 33 -jQuery 属性操作,文档操作(未完成)
- 批改网禁止粘贴怎么破_重大利好!教育部声明,要求家长批改作业等行为,发现一起严处一起...
- JS 防止表单重复提交
- 1.1为什么选择序列模型
- php方法 隐藏手机号中间四位
- html点线面制作,利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧
- 用装饰器来进行登录验证
- java easyui 模板_漂亮easyui皮肤组件html模板下载A 最新 最全
- 年终将至,财务人如何做好数据分析?
- [MUI框架]-滑动侧边栏-div同页结构
- authc过滤器 shiro_shiro原理之过滤器
- MS-RTOS --- 技术特点及其检测标准
- php google地图,google地图 标记地图代码