前端uni微信小程序和后端nodejs使用websoket

需求

前端向后台服务器发请求获取验证码,然后端游输入验证码,向我的后端发请求获取验证信息。后台给游戏端返回信息的时候同时给微信小程序端返回验证结果。意思是不要微信小程序端主动触发,验证是否绑定的请求。

思路

后端生成验证码时存入用户的唯一Id和ip,前端获取到验证码后,与后台建立 WebSocket 连接,然后游戏端填入验证码向后端接口发起请求,遍历整个clients列表,与数据库中的ip进行匹配,向匹配的ip发送消息。由于可能存在不同客户端Ip相同的情况,这里则需要根据唯一ID进行区分

代码

前端
javascript 复制代码
// 建立 WebSocket 连接
					const socket = uni.connectSocket({
					  url: 'wss://xxxx.com:8889',
					  success() {
					        console.log("ws连接成功!");
					  },
					  fail() {
					        console.log("ws连接失败!");
					   },
					});
//监听WebSocket接收消息事件
					socket.onMessage((message)=>{
						console.log('监听WebSocket接收消息事件',message.data);
						const data = JSON.parse(message.data)
						if(data.type == 'invalid'){
							uni.showToast({
								title: '无效验证码',
								duration: 2000,
								icon:'none'
							});
						}else{
							if(data.openid == this.userOpenid){
								if(data.result=='绑定成功'){
									uni.showToast({
										 title: "绑定成功",
										 icon:'success',
										 duration:1500,
										 complete: () => {//在这里执行跳转操作
											 setTimeout(()=>{
												 uni.switchTab({
													url:'/pages/index/index'
												 })
											 },1500)
										 }
									})
									uni.closeSocket({
									  success() {
										console.log("WebSocket连接已关闭");
									  },
									  fail() {
										console.log("关闭WebSocket连接失败");
									  },
									});
								}else{
									uni.showToast({
										title: '绑定失败',
										duration: 2000,
										icon:'none'
									});
								}
							}
						}
						
					})
					
后端
javascript 复制代码
//app
const WebSocket = require('ws')
const wss = new WebSocket.Server(
    {
        server:httpsServer
    },
    ()=>{
        console.log('socket start');
    }
)
// 将wss对象挂载到全局对象global上,在其他页面使用global.wss访问
global.wss = wss

//接口
exist(){
    //.....
      // 向前端小程序发送绑定结果
                    global.wss.clients.forEach((client) => {
                        //ip客户端IP地址
                    const ip = client._socket.remoteAddress ||          client.upgradeReq.connection.remoteAddress;
                        console.log('客户端IP地址:', ip,secretIp);
                        if(ip==secretIp){
                            client.send(JSON.stringify({
                              openid: secretOpenid,
                              result: '绑定成功',
                            }));
                        }
                    });

    //.....

}

记录一下。。。。

相关推荐
火星思想5 分钟前
都2025年了,还在问构建工具是干嘛的?
前端·前端框架·设计
杨进军9 分钟前
MutationObserver 实现 iframe 自适应高度
前端
火星思想10 分钟前
Promise 核心知识点(非基础)
前端·javascript·面试
前端大白话10 分钟前
炸裂!10个 React 实战技巧,让你的代码从“青铜”秒变“王者”
前端·javascript·react.js
Paramita11 分钟前
Koa源码解读
前端
用户614722537720311 分钟前
JavaScript 性能优化实战:从理论到落地的全面指南
前端
专业掘金11 分钟前
0426 手打基础丸
前端
WEI_Gaot17 分钟前
React 19 Props 和 react-icons 和 事件处理函数
前端·react.js
10年前端老司机17 分钟前
微信小程序模板语法和事件
前端·javascript·微信小程序
龙在天17 分钟前
Promise.withResolvers() vs 传统 Promise:谁更胜一筹?
前端