【微信小程序 SocketTask 详解】

SocketTask 创建

/*SocketTask*/
wx.connectSocket(Object object)
// ps (一般情况下不会使用到其他参数)
/**
常用参数:
	url: --开发者服务器 wss 接口地址
	header: --HTTP Header,Header 中不能设置 Referer
	timeout:--超时时间,单位为毫秒
	success: --接口调用成功的回调函数
	fail: --接口调用失败的回调函数
	complete:--接口调用结束的回调函数(调用成功、失败都会执行)
*/
wx.connectSocket({
  url: 'wss://example.qq.com',
  header:{
    'content-type': 'application/json'
  }
})

监听事件

只需要开启一个SocketTask连接

/**
此处一般定义一个变量去判断是否在创建完SocketTask连接后,成功调用 wx.onSocketOpen方法;
此处也是问题多发生地,因为在创建完SocketTask连接后,可能会出现不会进入open 监听方法中
#### 问题分析
01 检查connectSocket url 地址是否正确
02 是否建立连接时报错(比如10000 ,10001 等错误信息)
*/ 
    wx.onSocketOpen(() => {
    // 开启开关
      this.setData({
        socketOpen: true
      });
    });
/**
此处监听Socket是否有数据返回,一般异步多次返回 具体看业务需求/接口数据
*/    
    wx.onSocketMessage((res) => {
   // 此处去接收返回值,做相关业务
    });
/**
监听Socket异常
*/
    wx.onSocketError((res) => {
      this.addToLog("WebSocket error");
    });
/**
Socket 关闭 (主动关闭,被动关闭) 
一般情况下,开启长连接微信小程序不会立马关闭
如果出现异常,检查Socket域名配置,或者是否是本地调试未开启 不检验合法域名选项
*/
    wx.onSocketClose((res) => {
    // 关闭开关
      this.setData({
        socketOpen: false
      });
    });

完整demo

wxml 文件:

<!-- index.wxml -->

<view class="container">
  <view class="logs">
    <block wx:for="{{logs}}" wx:key="index">
      <view class="log-item">{{item}}</view>
    </block>
  </view>
</view>

js 文件:

Page({
  data: {
    logs: [],
    socketOpen: false,
    socketMsgQueue: [],
  },

  onLoad: function () {
    this.connectSocket();
  },

  connectSocket: function () {
    wx.connectSocket({
      url: "ws://localhost:8080",
    });

    wx.onSocketOpen(() => {
      this.setData({
        socketOpen: true
      });

      this.sendSocketMessage("Hello, WebSocket!");
    });

    wx.onSocketMessage((res) => {
      this.addToLog("Receive message: " + res.data);
    });

    wx.onSocketError((res) => {
      this.addToLog("WebSocket error");
    });

    wx.onSocketClose((res) => {
      this.setData({
        socketOpen: false
      });
      this.addToLog("WebSocket closed");
    });
  },

  closeSocket: function () {
    wx.closeSocket({
      success: () => {
        this.setData({
          socketOpen: false
        });
        this.addToLog("WebSocket closed");
      },
      // 此处重点 
      // 据本人微信小程序相关WebSocket经验,一般报错无法在创建WebSocket fail中获取,而是直接触发 close 方法时报错.
      //这也是很多小伙伴发现自己的open 方法不触发,自己又监听不到错误的原因之一,因此这块的fail 很重要
      fail: () => {
        this.addToLog("WebSocket close failed");
      }
    });
  },

  sendSocketMessage: function (msg) {
    if (this.data.socketOpen) {
      wx.sendSocketMessage({
        data: msg
      });
    } else {
      this.data.socketMsgQueue.push(msg);
    }
  },

  addToLog: function (log) {
    this.data.logs.push(log);

    this.setData({
      logs: this.data.logs
    });
  }
})

说明:

  1. 首先,在 onLoad 函数中调用 connectSocket 函数连接 WebSocket。

  2. connectSocket 函数的实现如下:

    a. 调用 wx.connectSocket 方法连接 WebSocket。

    b. 监听 WebSocket 的打开事件,并发送一条消息:“Hello, WebSocket!”。

    c. 监听 WebSocket 的消息事件,并将接收到的消息添加到日志列表中。

    d. 监听 WebSocket 的错误事件,并将错误消息添加到日志列表中。

    e. 监听 WebSocket 的关闭事件,并将关闭消息添加到日志列表中。

  3. 实现关闭 WebSocket 的函数 closeSocket

  4. 实现发送消息的函数 sendSocketMessage。如果 WebSocket 已经打开,则调用 wx.sendSocketMessage 方法发出消息;否则将待发送的消息推入一个消息队列中。

  5. 实现一个 addToLog 函数,用于将日志添加到日志列表中。

开启多个SocketTask连接

微信官方提供了SocketTask 统一管理方法

demo

	let scoket_one , scoket_two;
	
  	scoket_one = wx.connectSocket({
      url: 'wss://test.com/ws1',
      success: function (resConnect) {
      //打开连接成功
      }
    })
    scoket_one.onOpen((res)=>{
     
    })
 
    scoket_one.onMessage( (err) =>{
      console.log(err)
    })
    scoket_one.onClose( (res) =>{
      console.log(res,'scoket_one关闭')
    })
 
    scoket_two = wx.connectSocket({
      url: 'wss://test.com/ws2',
      success:  (res)=> {
      //打开连接成功
      }
    })
    scoket_two.onOpen((res)=>{
    })
 
    scoket_two.onMessage((err)=> {
      console.log(err)
    })
    scoket_two.onClose( (res) =>{
      console.log(res,'scoket_two关闭')
    })
    


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《微信小程序开发详解(闫小坤)》是一本介绍微信小程序开发的详细指南,致力于帮助读者掌握微信小程序开发的核心知识和技术。 本书以通俗易懂的语言,结合丰富的实例和案例,系统地介绍了微信小程序的整体结构和开发流程。首先,书中详细介绍了微信小程序的基础概念,包括小程序的特点、生命周期和基本组件等。接着,书中重点讲解了微信小程序的开发工具的使用方法,包括项目配置、页面设计和代码编写等方面的内容。此外,书中还深入讲解了小程序的常用API,如界面交互、网络请求、数据缓存和支付等,以帮助读者快速掌握实际开发中常用的技术和方法。 《微信小程序开发详解(闫小坤)》不仅着重介绍了基础知识和常用技术,还涵盖了一些高级主题,如自定义组件、数据绑定和页面跳转等。通过阅读本书,读者可以了解到如何进行小程序的页面跳转和传参、如何使用小程序的模板和动画等进阶技术。 除了技术内容,本书还提供了丰富的实例和案例,以帮助读者更好地理解和应用所学的知识。每个章节都配有实例代码和运行效果截图,读者不仅可以通过手动敲击代码来实践,还可以通过与实例对照来加深对知识的理解。 总之,《微信小程序开发详解(闫小坤)》是一本权威且实用的微信小程序开发指南,适合希望全面了解微信小程序开发的读者阅读。无论是初学者还是有一定开发经验的读者,都可以通过本书获得宝贵的知识和经验,并快速掌握微信小程序的开发技巧。 ### 回答2: 《微信小程序开发详解(闫小坤)》pdf 是一本介绍微信小程序开发的详细教程书籍。微信小程序是一种基于微信平台的轻量级应用,它可以在微信内部快速运行,无需下载安装,用户可以直接使用。这本书由闫小坤编写,详细介绍了微信小程序开发的各个方面。 首先,书中会介绍微信小程序的基本概念和特点,帮助读者了解小程序的背景和优势。然后,书中会教授读者如何搭建开发环境,包括安装微信开发者工具和配置相关插件等。接着,书中会详细介绍小程序的开发语言和框架,如通过使用JavaScript、HTML和CSS来构建小程序界面以及通过使用微信提供的小程序API来实现具体功能。 此外,书中还会介绍小程序的页面结构和布局方式,包括页面生命周期、常用组件和布局方式的介绍与应用。同时,书中也会教授读者如何处理用户交互和网络请求,以及如何利用微信开放平台的其他能力,如支付、定位、分享等。 最后,书中会详细介绍小程序的调试和发布流程,帮助读者了解如何及时修复bug并将小程序上线。同时,书中可能还包含一些小程序开发的最佳实践和经验分享,帮助读者提高小程序的质量和用户体验。 总的来说,《微信小程序开发详解(闫小坤)》pdf 是一本系统、全面、深入的小程序开发教程书籍,适合对小程序开发感兴趣的读者阅读和学习。 ### 回答3: 《微信小程序开发详解(闫小坤)》PDF 是一本介绍微信小程序开发的书籍,作者是闫小坤。该书详细解释了微信小程序的开发过程和技术要点。 首先,该书对微信小程序的概念和特点进行了说明。微信小程序是一种轻量级的应用程序,用户可以在微信中直接使用而无需下载安装。它具有开发成本低、使用方便等特点,并且在用户体验和功能开发上有着很大的灵活性。 接着,该书详细介绍了微信小程序的开发流程。它从环境准备、代码编写和调试、发布上线等方面进行了讲解。读者可以学习如何搭建开发环境、使用微信开发者工具进行代码编写和调试,以及如何将小程序发布到微信平台上线供用户使用。 此外,该书还对微信小程序的开发技术进行了详细的讲解。它涵盖了小程序的基本架构、组件的使用、事件绑定、数据绑定等内容。读者可以了解小程序开发中常用的技术要点,以及如何使用框架和组件来提高开发效率。 该书还提供了一些实例和案例,通过实际的开发项目来展示微信小程序的开发过程和技巧。读者可以通过学习这些实例,进一步理解和掌握微信小程序的开发技术。 总的来说,《微信小程序开发详解(闫小坤)》PDF 是一本系统全面介绍微信小程序开发的书籍。无论是对于初学者还是有一定小程序开发经验的开发者来说,都能从中获取到宝贵的知识和经验。同时,该书的编写风格简洁明了,容易理解和上手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值