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

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.xdnf.cn/news/16195.html

相关文章:

  • 武汉烽火民生汇,盛大启航
  • Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器
  • 无印 v1.6 视频解析去水印工具,支持多个平台
  • C++ : list的模拟
  • Qwen-MT:翻得快,译得巧
  • HAProxy 原理及配置
  • Nacos-服务注册,服务发现(一)
  • VS2022专业版安装扩展
  • SpringBoot(黑马)
  • Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)
  • 使用 FFmpeg 实现 RTP 音频传输与播放
  • 没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
  • CSS3新特性深度解析:Position Sticky粘性定位完整指南
  • 基于单片机的楼宇门禁系统的设计与实现
  • 三种深度学习模型(GRU、CNN-GRU、贝叶斯优化的CNN-GRU/BO-CNN-GRU)对北半球光伏数据进行时间序列预测
  • Android Room 持久化库:简化数据库操作
  • Unity编辑器拓展 IMGUI与部分Utility知识总结(代码+思维导图)
  • golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
  • 基于STM32汽车自动智能雨刷检测雨滴系统设计
  • 在 Azure 中配置 SMS 与 OTP
  • 前端面试问题
  • 【GoLang#2】:基础入门(工具链 | 基础语法 | 内置函数)
  • day 35打卡
  • IMU的精度对无人机姿态控制意味着什么?
  • 避开算力坑!无人机桥梁检测场景下YOLO模型选型指南
  • SQL基础⑭ | 变量、流程控制与游标篇
  • 【Linux】进程切换与优先级
  • Qt 多媒体开发:音频与视频处理
  • 从“人工眼”到‘智能眼’:EZ-Vision视觉系统如何重构生产线视觉检测精度?
  • C++与Hive、Spark、libhdfs、ACID交互技巧