前端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: '绑定成功',
                            }));
                        }
                    });

    //.....

}

记录一下。。。。

相关推荐
Bruce_Liuxiaowei21 分钟前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo27 分钟前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真30 分钟前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan1 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html
墨林陌1 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端
Moment1 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端
AI宇宙狂想家1 小时前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
Sailing2 小时前
🚀🚀【封闭结束7】Agent 为什么总是“失忆”?从长期记忆到上下文工程的生产实践
前端·人工智能·agent
OpenTiny社区2 小时前
AI 生成的 Vue 代码,终于能直接用了!
前端·vue.js·github
Ramble_Naylor2 小时前
Rust深度解读:高性能 Web 网关与 Axum 架构剖析
前端·架构·rust