实例介绍
【实例简介】后台基于腾讯云提供的小程序解决方案,修改config.js中的host即可
【实例截图】
【核心代码】
/** * @fileOverview 演示会话服务和 WebSocket 信道服务的使用方式 */ // 引入 QCloud 小程序增强 SDK var qcloud = require('../../vendor/qcloud-weapp-client-sdk/index'); // 引入配置 var config = require('../../config'); // 显示繁忙提示 var showBusy = text => wx.showToast({ title: text, icon: 'loading', duration: 10000 }); // 显示成功提示 var showSuccess = text => wx.showToast({ title: text, icon: 'success' }); // 显示失败提示 var showModel = (title, content) => { wx.hideToast(); wx.showModal({ title, content: JSON.stringify(content), showCancel: false }); }; /** * 使用 Page 初始化页面,具体可参考微信公众平台上的文档 */ Page({ /** * 初始数据,我们把服务地址显示在页面上 */ data: { loginUrl: config.service.loginUrl, requestUrl: config.service.requestUrl, tunnelUrl: config.service.tunnelUrl, tunnelStatus: 'closed', tunnelStatusText: { closed: '已关闭', connecting: '正在连接...', connected: '已连接' } }, /** * 点击「登录」按钮,测试登录功能 */ doLogin() { showBusy('正在登录'); // 登录之前需要调用 qcloud.setLoginUrl() 设置登录地址,不过我们在 app.js 的入口里面已经调用过了,后面就不用再调用了 qcloud.login({ success(result) { showSuccess('登录成功'); console.log('登录成功', result); }, fail(error) { showModel('登录失败', error); console.log('登录失败', error); } }); }, /** * 点击「清除会话」按钮 */ clearSession() { // 清除保存在 storage 的会话信息 qcloud.clearSession(); showSuccess('会话已清除'); }, /** * 点击「请求」按钮,测试带会话请求的功能 */ doRequest() { showBusy('正在请求'); // qcloud.request() 方法和 wx.request() 方法使用是一致的,不过如果用户已经登录的情况下,会把用户的会话信息带给服务器,服务器可以跟踪用户 qcloud.request({ // 要请求的地址 url: this.data.requestUrl, // 请求之前是否登陆,如果该项指定为 true,会在请求之前进行登录 login: true, success(result) { showSuccess('请求成功完成'); console.log('request success', result); }, fail(error) { showModel('请求失败', error); console.log('request fail', error); }, complete() { console.log('request complete'); } }); }, switchTunnel(e) { const turnedOn = e.detail.value; if (turnedOn && this.data.tunnelStatus == 'closed') { this.openTunnel(); } else if (!turnedOn && this.data.tunnelStatus == 'connected') { this.closeTunnel(); } }, /** * 点击「打开信道」,测试 WebSocket 信道服务 */ openTunnel() { // 创建信道,需要给定后台服务地址 var tunnel = this.tunnel = new qcloud.Tunnel(this.data.tunnelUrl); // 监听信道内置消息,包括 connect/close/reconnecting/reconnect/error tunnel.on('connect', () => { console.log('WebSocket 信道已连接'); this.setData({ tunnelStatus: 'connected' }); }); tunnel.on('close', () => { console.log('WebSocket 信道已断开'); this.setData({ tunnelStatus: 'closed' }); }); tunnel.on('reconnecting', () => { console.log('WebSocket 信道正在重连...') showBusy('正在重连'); }); tunnel.on('reconnect', () => { console.log('WebSocket 信道重连成功') showSuccess('重连成功'); }); tunnel.on('error', error => { showModel('信道发生错误', error); console.error('信道发生错误:', error); }); // 监听自定义消息(服务器进行推送) tunnel.on('speak', speak => { showModel('信道消息', speak); console.log('收到说话消息:', speak); }); // 打开信道 tunnel.open(); this.setData({ tunnelStatus: 'connecting' }); }, /** * 点击「发送消息」按钮,测试使用信道发送消息 */ sendMessage() { // 使用 tunnel.isActive() 来检测当前信道是否处于可用状态 if (this.tunnel && this.tunnel.isActive()) { // 使用信道给服务器推送「speak」消息 this.tunnel.emit('speak', { 'word': 'I say something at ' new Date(), }); } }, /** * 点击「测试重连」按钮,测试重连 * 也可以断开网络一段时间之后再连接,测试重连能力 */ testReconnect() { // 不通过 SDK 关闭连接,而是直接用微信断开来模拟连接断开的情况下,考察 SDK 自动重连的能力 wx.closeSocket(); }, /** * 点击「关闭信道」按钮,关闭已经打开的信道 */ closeTunnel() { if (this.tunnel) { this.tunnel.close(); } this.setData({ tunnelStatus: 'closed' }); }, /** * 点击「聊天室」按钮,跳转到聊天室综合 Demo 的页面 */ openChat() { // 微信只允许一个信道再运行,聊天室使用信道前,我们先把当前的关闭 this.closeTunnel(); wx.navigateTo({ url: '../chat/chat' }); }, openDrawguess() { this.closeTunnel(); wx.navigateTo({ url: '../drawguess/index' }); }, openUpload() { wx.navigateTo({ url: '../upload/index' }); } });
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论