cocos中使用SocketIO

Creator版本:v3.8.3

socketIO是socket的一个封装
cocos里集成了websocket但是没有socketIO

  • 下载依赖文件
    首先需要下载socketIO代码,版本要和后端保持一致

    能npm下载最好npm install socket.io-client@version(需要指定版本)
    但我这一直超时,所以就直接去下载代码
  • 下载后复制到项目目录中(我放到了libs下)
    在这里插入图片描述
  • 然后需要配置为插件
    在脚本的属性检查器选择【导入为插件】,并根据需求配置
    在这里插入图片描述
  • 然后就开始写连接代码吧(io会报红,不用管!!)
    我创建了SocketIO.ts脚本(可以根据自己项目定制)
import { GameEvent } from '../game/common/config/GameEvent';
class ScoketIO {
    socket: any;

    /**
     * 连接socketIO
     * @param url 地址
     * @param call 连接成功回调
     */
    connect(url: string, call?: Function) {
        if (this.socket && this.socket.connected) return;
        console.log("Starting connection to socket.io server");
        let socket = io(url,
            {
                withCredentials: true,
                extraHeaders: {
                    "my-custom-header": "abcd",
                },
                transports: ['websocket', 'polling', 'flashsocket']
            });
 
        console.log(socket.connected); // socket是否与服务器连接
        console.log(socket.disconnected); // socket是否与服务器断开连接
 
        // client-side
        socket.on("connect", () => {
            console.log(`Socket.ID: ${socket.id}`);
            if (call) call();
        });

        socket.on("disconnect", (reason: any) => {
            console.log(socket.connected);
            console.log("断开连接-disconnect", reason);
        })

        socket.on("error", (err: any) => {
            console.log("错误-error", err);
        })
        // 连接错误
        socket.on("connect_error", (err: any) => {
            console.log("连接错误-connect_error:", err);
        });
        // 连接超时
        socket.on("connect_timeout", (data: any) => {
            console.log("连接超时-connect_timeout", data);
        });

        socket.on(MsgEvent.StartGame, (data: any) => {
            console.log(MsgEvent.StartGame, data);
            // 派发事件MsgEvent.StartGame
        })

        this.socket = socket;
    }

    send(key: string, msg: any) {
        if(this.socket && this.socket.connected){
            console.log("========socket send", key, msg)
            this.socket.emit(key, msg);
        }
    }


    close() {
        if(this.socket && this.socket.connected){
            this.socket.connected = false;
            this.socket.disconnect();
            this.socket = null;
        }
    }
}

/**响应事件类型 */
export enum MsgEvent {
    // 开始游戏
    StartGame = "StartGame",
}
export let socketIO = new ScoketIO();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值