V3.8.0手机客户端HTTP网络游戏用什么方式联网?fetch方式没实现?


response 只有这些属性和方法


这个是 chrome和CC里的打印

@jare
帮忙看看呗!

fetch方试获取不到服务器返回的二进制数据
没有arrayBuffer()方法

async fetchData(url: string): Promise {

    try {

        const response = await fetch(url);

        if (!response.ok) {

            throw new Error(`Network response was not ok. Status: ${response.status}`);

        }

        const buffer = await response.arrayBuffer();

        return new Uint8Array(buffer);

    } catch (error) {

        console.error('Error fetching binary data:', error);

        throw error;

    }

}

async main() {

    const url = 'https://xxxx';

    try {

        const binaryData = await this.fetchData(url);

        // 在这里可以对二进制数据进行解析和处理

        console.log('Binary data:', binaryData);

        // 示例:将二进制数据转换为 Base64 字符串

        const base64String = btoa(String.fromCharCode(...binaryData));

        console.log('Base64 string:', base64String);

    } catch (error) {

        console.error('An error occurred:', error);

    }

}

在cocos creator里 打印不出response.arrayBuffer(); 这个, 似乎是 CC没实现这个方法!
你的代码可以在win模拟器上运行吗?

‘Content-Type’,‘text/plain’
new Uint8Array(response.text())
可以试试这样操作行不行

试过 不行,估计是 字符串转二进制 或者 二进制转字符串 会丢弃一些字节
导致解析出的二进制数据错误!

那奇怪了 还真没碰到丢失字节的情况
function stringToUint8Array(str){
var arr = [];
for (var i = 0, j = str.length; i < j; ++i) {
arr.push(str.charCodeAt(i));
}
var tmpUint8Array = new Uint8Array(arr);
return tmpUint8Array
}
这样转还会丢?

还是不行, 我估计在
let response_text = await response.text();
这个时候 取得的数据就不是服务器原始下发的数据了!

方便提供一下测试接口吗 我试一下

不行啦! 这是已经上架了的 在线游戏 抱歉抱歉

@jare
帮忙给看看吧!
fetch方式怎么才能获取到服务器下发的二进制数据?

3.8.x
https 无法获取二进制数据, 网络游戏如何破局?

调整一下服务端发送的content-type类型

具体值是什么?

搜一下content-type 二进制,不止这一个参数 是HTTP发送二进制有一套规则 都配置对 再看结果

我们服务器现在对接 cocos coreator 2.4.10的客户端是用二进制的,没问题
客户端换到 3.8.x 用fatch方式获取不到二进制数据,但看起来是传过来字符串了,转不出二进制数据
2.4.10用的是XMLHttpRequest这个方式!

image

为什么不用websocket呢?

我们项目一直是http的,很难改啦! 不让服务器不支持