当前位置: 首页 > news >正文

cocos creator 3.8.6 websocke的一直报错WebSocket is not a constructor

WebSocket is not a constructor

在cocos creator 3.8.6 构建的安卓应用中,使用了websocket,在运行过程中一直报 WebSocket is not a constructor

解决方法:

. 官方说明
Cocos Creator 3.x(包括 3.8.6)原生平台(Android/iOS)WebSocket 支持,官方文档说明如下:
原生平台:WebSocket 由引擎自动注入,直接用 window.WebSocket 或全局 WebSocket 即可,不需要 WebSocket。
但你遇到 WebSocket is not a constructor,说明全局 WebSocket 没有被注入,可能是构建配置或引擎 bug。
2. 解决思路
方案一:确认网络模块是否被裁剪
检查构建面板 → 模块设置
在这里插入图片描述

确认“网络”模块(network)已勾选。
如果未勾选,原生包不会包含 WebSocket 支持。
重新构建并安装到设备测试
勾选后重新构建、编译、安装。
用法示例

   if (sys.isNative && sys.platform === sys.Platform.ANDROID) {console.log('Android平台特殊处理', this.host);// Android平台特殊处理//const cert: string  = 'cert/cert.pem'; // TODO: 处理证书路径this.ws = new WebSocket(this.host!, "ws");//this.ws = new jsb.WebSocket(this.host!,"ws");} else {console.log('其他平台特殊处理', this.host);this.ws = new WebSocket(this.host!);}

方案二:用 cc.Socket(Cocos 3.8.6 新增)
Cocos Creator 3.8.x 开始,原生平台推荐用 cc.Socket,不是 WebSocket。
用法示例

import { sys, Socket } from 'cc';private initSocket(): void {if (!this.ws) {if (sys.isNative && sys.platform === sys.Platform.ANDROID) {console.log('Android平台特殊处理', this.host);this.ws = new Socket();// 解析 host 和 portconst url = new URL(this.host!);this.ws.connect(url.hostname, Number(url.port));} else {console.log('其他平台特殊处理', this.host);this.ws = new window.WebSocket(this.host!);}// 事件绑定(cc.Socket 事件和 WebSocket 不完全一样)this.ws.on('open', this.connected.bind(this));this.ws.on('message', this.message.bind(this));this.ws.on('close', this.close.bind(this));this.ws.on('error', this.error.bind(this));this.notification = new EventTarget();} else {// ... 你的原有逻辑 ...}
}

注意:
cc.Socket 只支持原生平台,Web 端还是用 WebSocket。
事件名和标准 WebSocket 不一样,需用 on(‘open’, …) 这种方式。
方案三:自定义全局 WebSocket
如果你项目里有 polyfill 或第三方库覆盖了全局 WebSocket,请检查是否有类似代码,避免冲突。
3. 总结
优先推荐用 cc.Socket,这是 Cocos Creator 3.8.x 官方推荐的原生网络通信方式。
构建时确保“网络”模块已勾选,否则原生包没有网络能力。
Web 端用 window.WebSocket,原生端用 cc.Socket。

http://www.dtcms.com/a/297703.html

相关文章:

  • Logstash 多表增量同步 MySQL 到 Elasticsearch:支持逻辑删除与热加载,Docker 快速部署实战
  • vue项目创建流程
  • XML的简略知识点
  • PyCharm高效开发全攻略
  • RHCA - CL260 | Day01:Ceph 架构及环境介绍
  • leetcode102:二叉树的层序遍历(队列实现)
  • 栈----1.有效的括号
  • iOS WebView 调试实战,文件上传与权限弹窗异常的排查路径
  • 三维模型驱动下的光伏组件智能排列方案
  • 【深入底层】C++开发简历4+4技能描述6
  • 百特搭AI低代码平台助力企业国际化业务敏捷拓展
  • 《一种采用分布式多模态传感模块的身体尺度机器人皮肤的设计、评估与应用》论文解读
  • 【日志】unity俄罗斯方块——边界限制检测
  • 如何在离线电脑win11上安装VS2022
  • PI 思维升级 PI设计的典范转移:从阻抗思维到谐振控制
  • 在 Ansys CFX Pre 中配置 RGP 表的分步指南
  • C++中的反向迭代器
  • java面试题(中级题汇总)
  • k8s 中的 deployment,statefulset,daemonset 控制器的区别
  • 特征值与特征向量
  • 腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟
  • 电科金仓新一代数据库一体机:国产化方案替换优质选择
  • 本地内网IP映射到公网访问如何实现?内网端口映射外网工具有哪些?
  • python学习DAY22打卡
  • 深入解析Hadoop高频面试题:HDFS读/写流程的RPC调用链
  • yolov8通道级剪枝讲解(超详细思考版)
  • 解密负载均衡:如何轻松提升业务性能
  • JS事件流
  • 疯狂星期四第19天运营日记
  • 网络资源模板--基于Android Studio 实现的天气预报App