网络请求+基于Node.js的WebSocket

news2024/11/20 14:26:09

 

目录

前言

网络访问配置

1.配置流程

注意事项

使用限制

网络请求详情API

wx.request请求数据API

​编辑

wx.uploadFile文件上传API

wx.downloadFile文件下载API

WebSocket会话API

基于Node.js的WebSocket

为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?

目前,支持WebSocket的主流浏览器如下:

 WebSocket相关简述


前言

小程序如果像动态渲染页面,就需要从后台服务器接口获取数据,不能直接把数据写在页面或者业务逻辑层里。这样的数据都是静态的,动态数据需要调用接口发起网络请求来获取,通过API返回数据,然后渲染到页面视图上,即可达到显示页面的效果。

网络访问配置

 

小程序在发起网络请求前,需要在微信公众平台上访问域名的配置。小程序只允许访问已配置的域名,包括普通HTTPS请求(wx.request)、上传文件(wx.uploadFile)、下载文件(wx.downloadFile)和WebSocket通信(wx.connectSocket)的域名!

        注意:从基础库2.4.0开始,网络请求允许与局域网IP通信,但是要注意不允许与本机IP通信。从基础库2.7.0开始,小程序提供UDP通信(wx.createUDPSocket),只允许与同个局域网内的非本机IP通信。

1.配置流程

 

在微信公众平台首页登录,在小程序后台的"开发">"开发设置">"服务器域名"中进行配置(需要用注册的微信扫码确认身份)

 如果没有配置域名直接访问的话直接访问,系统就会提示错误信息!

注意事项

1.域名只支持https(wx.reauest、wx.uplosdFile、wx.downloadFile)和wss(wx.connect-Socket)协议。

2.域名不能使用IP地址(小程序的局域网IP除外)或localhost。

3.可以配置端口,如https://xxxxx.com:xxxx,但是配置后只能向https://xxxxx.com:xxxx发起请求,如果向https://xxxxx.com、https://xxxxx.com:yyyy等URL发送请求则会失败。

4.如果不配置端口,如https://xxxxx.com,那么请求的URL中也不能包含端口,即便是默认的443端口,如果向https://xxxxx.com:443发送请求则会失败。

5.域名必须经过ICP备案。

6.出于安全考虑,api.weixin.qq.com不能被配置服务器域名,相关API也不能在小程序内调用。开发者应将AppSecret保存到后台服务器中,通过服务器使用getAccessToken接口获取access_token,调用相关API。

7.对于每个接口,分别可以配置最多20个域名。

8.网络请求默认超时时间和最大超时时间60s,超时时间可以在app.json文件或game.json文件中通过networktimeout配置。

使用限制

 

网络访问也有使用限制,包括网络请求设置、并发限制设置、超时设置、编码设置等使用上的限制。

1.网络请求的请求来源referer header 不可设置。其格式固定为https://servicewechat.com/{appid}/{version}/page-frame.html,其中{appid}为小程序的appid,{version}为小程序的版本号,版本号为0表示为开发版本、体验版本及审核版本,版本号为devtools表示为开发者工具,其余为正式版本号。

2.wx.reauest、wx.uploadFile和wx.downloadFile的最大并发限制是10个。

3.wx.connectSockt的最大并发限制是5个。

4.小程序进入后台运行后,如果5s内网络请求没有结束,会调回错误信息fail interrupted;在回到前台之前,网络请求接口都会无法调用。

5.建议服务器返回值使用UTF-8编码。对于非UTF-8编码,小程序会尝试进行转换,但会有转换失败的可能。

6.小程序会自动对BOM头进行过滤(只过滤一个BOM头)。

7.只要成功接收到服务器的返回值,无论返回状态码(statusCode)是多少,都会进入成功(success)回调。这里可以根据自己的业务逻辑对返回值进行判断。

网络请求详情API

 

wx.request请求数据API

 

wx.request是用来请求服务器数据的API,它发起的是HTTPS请求,来获取后台服务器接口的数据。wx.request(Object object)有一个Object对象参数。

发起wx.request请求时,系统也创建了RequestTask对象,这个对象提供了以下3种方法。

1.RequestTask.abort()中断请求任务。

2.RequestTask.onHeaderReceived(function callback)监听HTTP Response Header事件。

3.RequestTask.offHeaderReceived(function callback)取消监听HTTP Response Header事件

我们已https://www.toutiao.com为例来进行代码实现:

// pages/index/index.js
Page({

onLoad:function(){
  var requestTask = wx.request({
    url: 'https://www.toutiao.com',
    data:{
      provinceld:'1'
    },
    method:'GET',
    success:function(res){
      console.log(res)
    },
    fail:function(err){

    },
    complete:function(){

    }
  });
  //监听HTTP Response Header事件
  requestTask.onHeadersReceived(function(res){
    console.log("-----------监听HTTP Response Header事件----------");
    console.log(res)
  })
  //取消监听HTTP Response Header事件
  requestTask.offHeadersReceived(function(res){
    console.log("------------取消HTTP Response Header事件----------");
    // console.log(res)
  })
  
},

})

当请求成功后data数据最终发送给服务器的数据时string类型的,传入的data如果不是dtring类型的,会转换成string,转换规则如下。

1.对于header['Content-Type'] 为‘Application/json’的数据,会对数据进行JSON序列化。

2.对于header['Content-Type'] 为‘Application/x-www-form-urlencoded‘的数据,会将数据转换成query string(encodeURlComponent(k)=encodeURlComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)。

wx.uploadFile文件上传API

 

wx.uploadFile API可以间将本地资源上传到服务器。客户端发起一个HTTPS POST请求。

发起wx.uploadFile请求时,系统也创建了UploadTask对象,这个对象提供了以下5种方法:

1.UploadTask.abort()中断请求任务。

2.UploadTask.onHeadersReceived(function callback)监听HTTP Response Header事件。

3.UploadTask.offHeadersReceived(function callback)取消监听HTTP Response Header事件。

4.UploadTask.onProgressUpdate(function callback)监听上传进度变化事件。

5.UploadTask.offProgressUpdate(function callback)取消监听上传进度变化事件。

uploadTask是wx.uploadFile创建一个对象,它可以使用uploadTask.abort()中断请求任务,停止大气网络请求;使用uploadTask.onHeaderReceived(function callback)监听HTTP Response Header事件,这个事件会比请求完成事件更早完成;uploadTask.offHeaderReceived(function callback)取消监听HTTP Response Header事件;使用uploadTask.onProgressUpdate(function callback)监听上传进度变化事件;使用uploadTask.offProgressUpdate(function callback)取消监听上传进度变化事件。

wx.downloadFile文件下载API

 

wx.uploadFile是文件上传的API,wx.downloadFile是文件下载的API,他们正好相反,wx.downloadFile是客户端直接发起的一个HTTPS GET 请求,从服务器获取的数据,返回文件的本地临时路径,单词下载允许的最大文件大小为50MB,下载到小程序客户端本地。

DownloadTask对象wx.downloadFile创建的一个对象,它可以监听下载进度变化事件,以及取消下载任务的对象,DownloadTask对象提供以下方法:

1.DownloadTask.abort()终端下载任务。

2.DownloadTask.onProgressUpdate(function callback)监听下载啊进度变化事件。

3.DownloadTask.offProgressUpdate(function callback)取消监听下载啊进度变化事件。

4.DownloadTask.onHeadersReceived(function callback)监听HTTP Response Header事件,会比请求完成事件更早。

5.DownloadTask。offHeadersReceived(function callback)取消监听HTTP Response Header事件。

 

首先执行的是DownloadTask.onHeadersReceived(function callback)监听HTTP Response Header事件它比请求监督事件更早执行;然后执行的是DownloadTask.onProgressUpdate(function callback)监听下载啊进度变化事件,直到下载完;最后返回文件的临时路径,根据临时路径就可以将文件渲染将文件渲染到视图或者下载到手机客户端。

WebSocket会话API

 

WebSocket事实上是一个多方通信接口,当小程序部署到服务商的时候,WebSocket允许多个手机访问后台服务器来建立通信!

 

WebSocket会话API用来创建一个会话连接,创建完成会话连接后可以相互通信,像微信聊天和QQ聊天一样。他会用到以下7种方法:

1.wx.connectSocket(OBJECT)创建一个会话链接。

2.wx.onSocketOpen(CALLBACK)监听WebSocket连接打开事件。

3.wx.onSocketError(CALLBACK)监听WebSocket错误。

4.wx.sendSocketMessage(OBJECT)发送数据。

5.wx.onSocketMessage(CALLBACK)监听WebSocket接收到服务器的消息事件。

6.wx.closeSocket()关闭WebSocket连接。

7.wx.onSocketClose(CALLBACK)监听WebSocket关闭。

注意:一个微信小程序同时只能有一个WebSocket连接,如果创建时已存在一个WebSocket连接,则会自动关闭该连接,并重新创建一个WebSocket连接。

基于Node.js的WebSocket

 

WebSocket需要有后台程序的配合,而后台程序可以采用Tomcat下的Java程序,也可以采用Node.js程序,简单地说,Node.js就是运行在服务器端的JavaScript。Node.js是一个基于Chrome JavaScript运行时建立的平台,是一个事件驱动I/O服务端JavaScript环境,它基于Google的V8引擎,因为V8引擎执行JavaScript的速度非常快,所以性能非常好!

WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。任何一方都可以主动发消息给对方。

HTTP协议是一个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。

WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接。我们来看看WebSocket连接是如何创建的。

该请求和普通的HTTP请求有几点不同:

  1. GET请求的地址不是类似/path/,而是以ws://开头的地址;
  2. 请求头Upgrade: websocket和 Connection: Upgrade表示这个连接将要被转换为WebSocket连接;
  3. Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;
  4. Sec-WebSocket-Version指定了WebSocket的协议版本。

为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?

 

实际上HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制限制了全双工通信。WebSocket连接建立以后,其实只是简单规定了一下:接下来,咱们通信就不使用HTTP协议了,直接互相发数据吧。

安全的WebSocket连接机制和HTTPS类似:

首先,浏览器用wss://xxx创建WebSocket连接时,会先通过HTTPS创建安全的连接,然后,该HTTPS连接升级为WebSocket连接,底层通信走的仍然是安全的SSL/TLS协议。

很显然,要支持WebSocket通信,浏览器得支持这个协议,这样才能发出ws://xxx的请求。

目前,支持WebSocket的主流浏览器如下:

  • Chrome

  • Firefox
  • IE >= 10
  • Sarafi >= 6
  • Android >= 4.4
  • iOS >= 8

 

 WebSocket相关简述

由于WebSocket是一个协议,服务器具体怎么实现,取决于所用编程语言和框架本身。Node.js本身支持的协议包括TCP协议和HTTP协议,要支持WebSocket协议,需要对Node.js提供的HTTPServer做额外的开发。已经有若干基于Node.js的稳定可靠的WebSocket实现,我们直接用npm安装使用即可。

其实ws模块既包含了服务器端,又包含了客户端。wsWebSocket就表示客户端,它其实就是WebSocketServer响应connection事件时回调函数传入的变量ws的类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git命令记不住?可视化git操作平台Sourcetree入门教程

1、为什么要用Sourcetree 在应届生在参加实习或者工作的时候,往往需要配置各种各样的环境,git肯定是程序员必不可少的分布式版本控制系统,但刚出来工作时往往对git代码不熟悉,老是会忘掉一些命令,所以笔者在此推荐一个…

算法《第四版》笔记整理

算法第四版 先导例子:动态连通性 - 书中1.5 知识点:并查集-一种用于解决动态连通性问题的算法 描述:对于N个对象,有两种操作:1.连接两个对象 2.判断两个对象是否存在连接路径 如巨大的连通性问题: 在分析…

【力扣刷题】Day32——单调栈专题

文章目录单调栈1.每日温度2.下一个更大元素 I3.下一个更大元素II4. 接雨水5.柱状图中最大的矩形单调栈 单调栈基础知识回顾&#xff1a;单调栈与单调队列_塔塔开!!!的博客-CSDN博客_单调栈 单调队列 单调栈一般模板&#xff1a; int[] stk new int[N] //Stack<Integer>…

倒排索引-字符串相似匹配(结巴分词、中文转拼音)

工作中&#xff0c;遇到有两个不同的系统&#xff0c;两个系统中有相同的功能&#xff0c;维护一个主播的名称。现在准备将两个系统的主播合并到一起。因为主播名称可能由不同的人维护的&#xff0c;他们也不知道主播的真实姓名&#xff0c;比如一条小团团&#xff0c;可能维护…

香橙派3LTS部署ROS2阿克曼开源平台

1.系统镜像下载 这里我们需要安装ROS2的humble版本&#xff0c;需要ubuntu 22.04版本的系统。 香橙派镜像下载&#xff1a;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-3-LTS.html 点击Ubuntu镜像&#xff0c;选择jamm…

【linux】进程概念详述

进程概念一、冯诺依曼系统二、操作系统2.1 OS层次图2.2 操作系统的意义2.2.1 系统调用与库函数的区别2.3 管理的理解三、进程3.1 进程的概念3.2 描述进程-PCB3.3 进程和程序3.4 PCB内容3.4.1 查看进程3.4.2 标识符3.4.3 状态3.4.4 程序计数器3.4.5 记账信息3.4.6 上下文信息❗️…

1.极限与连续-——“机器学习中的数学”

1.通过集合相等来讲解什么是映射关系 上面问的这个问题&#xff08;2N N2&#xff09;说明了什么&#xff1f; ——两个无穷集合&#xff0c;如果能找到一种对应关系&#xff08;映射关系&#xff09;&#xff0c;那么我们就可以说这两个集合是等价的。 数列的极限就是趋势 …

字符串转二叉树

一. 题目介绍 二. 题目分析 首先 题目让我们以先序遍历的方式用字符串建立一个二叉树 输入是一个字符串 输出是是以中序遍历二叉树打印 我们先来看最简单的输入 这里只要建立一个字符数组 然后等测试用例输入就好了 // 接受输入值char arr[100]{0};scanf("%s",…

网络原理 --- 传输层Ⅳ TCP协议中的延迟应答、捎带应答、面向字节流、TCP中的异常处理

文章目录网络原理传输层TCP协议7.延迟应答8.捎带应答9. 面向字节流10.TCP中的异常处理总结网络原理 介绍TCP/IP协议中每一层里面的核心内容~ 应用层传输层网络层数据链路层物理层 传输层TCP协议 7.延迟应答 提高传输效率的机制 又是基于流量控制,来引入的提高效率的机制 实…

数据在内存中的存储

目录 数据在内存中的存储&#xff1a;&#xff1a; 整型及其浮点型存储方式: 1.数据类型介绍 2.整形在内存中的存储&#xff1a;原码 反码 补码 3.大小端字节序介绍及判断 4.浮点型在内存中的存储 5.两道经典指针选择题 C语言编程训练(牛客网) 1.喝汽水问题 2.字符串逆序 3.打…

Python编程运算符 ——算数运算符

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.运算符 1.在Python运算符中分为 2.算数运算符 3.比较重要的运算符 4…

网络原理——No.1 传输层_TCP的确认应答机制与超时重传

JavaEE传送门JavaEE JavaEE——网络原理_应用层 网络原理——传输层_UDP 目录传输层TCPTCP 的基本特性确认应答机制超时重传传输层 端到端之间的传输, 重点关注的是起点和终点 核心的协议有两个: UDP: 无连接, 不可靠传输,面向数据报, 全双工 TCP: 有链接, 可靠传输, 面向字…

黑猫带你学UFS协议第11篇:什么是逻辑单元(LU)与逻辑块(Sector)

本文依据UFS3.1 JEDEC协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创维权,禁止私自转载。 文章所在专栏:《黑猫带你学:UFS协议详解》 1 LU简介 我们对与UFS、emmc一类存储芯片,最重要的功能是什么?无非就是存数据和取出数据,也…

神经网络的输入稀疏矩阵,神经网络中的矩阵运算

1、BP神经网络模型各个参数的选取问题 样本变量不需要那么多&#xff0c;因为神经网络的信息存储能力有限&#xff0c;过多的样本会造成一些有用的信息被丢弃。如果样本数量过多&#xff0c;应增加隐层节点数或隐层数目&#xff0c;才能增强学习能力。 一、隐层数 一般认为&am…

牛客前端刷题(九)—— 打包篇

还在担心面试不通过吗&#xff1f;给大家推荐一个超级好用的刷面试题神器&#xff1a;牛客网&#xff0c;里面涵盖了各个领域的面试题库&#xff0c;还有大厂真题哦&#xff01; 赶快悄悄的努力起来吧&#xff0c;不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享&a…

greenplum 源码解析 FTS辅助进程--ReadMe

简介 在greenplum数据库中master节点有一个专属进程Fault Tolerance Service (FTS: 容错服务)&#xff0c;其主要功能是检测所有segment节点的健康信息&#xff0c;如果其检测到segment节点的primary出现异常[硬件故障/宕机]&#xff0c;会在第一时间将其对应的mirror提升为新的…

MySql(50)MySQL日志

文章目录MySQL支持的日志日志类型日志的弊端慢查询日志(slow query log)通用查询日志查看当前状态启动日志永久启动临时启动查看日志删除\刷新日志错误日志(error log)删除\刷新日志二进制日志(bin log)查看默认情况日志参数设置查看日志使用日志恢复数据删除二进制日志PURGE M…

vue3 响应式对象的 api ,你全用过了吗?

文章目录Ⅰ. ref、reactive ( 递归监听 )Ⅱ. isRef、isReactive ( 判断 )Ⅲ. toRef 和 toRefs ( 解构 )Ⅳ. toRaw 、 markRaw ( 解除代理)Ⅴ. unref ( 拷贝 )Ⅵ. shallowRef 、shallowReactive&#xff08; 非递归监听 &#xff09;Ⅶ. triggerRef &#xff08;强制更新&#x…

红黑树原理及旋转

红黑树&#xff0c;本质上来说就是一棵二叉查找树 但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡 保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n) 但它是如何保证一棵n个结点的红黑树的高度始终保持在h logn的呢&#xff1f;这就引出了红黑…

相似度_对抗学习:SimCSE: Simple Contrastive Learning of Sentence Embeddings

SimCSE: Simple Contrastive Learning of Sentence Embeddings 这篇论文&#xff0c;我觉得有意思。在创造对抗学习的正负例时&#xff0c;正例直接使用它本身。将同一个句子传递给预先训练好的编码器两次&#xff1a;通过应用两次dropout&#xff0c;我们可以得到两个不同的嵌…