HarmonyOS 鸿蒙Next ets TCPSocket 接收数据缓慢

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ets TCPSocket 接收数据缓慢

使用Tcp Socket成功与服务器建立连接,但是当接收服务端发送过来的数据包出现分包时,message事件回调接收到第一个数据包后,要等几秒中才会再次进入message事件回调,因此造成接收整包时间非常长,数据无法及时接收和解析。请问大家对这种情况都是怎样处理的?希望大神能够帮帮忙,谢谢!

let socket = socket.constructTCPSocketInstance()

socket.on(‘connect’, () => {

    console.log(TAG, socket log on connect success);

});

socket.on(‘close’, data => {

    console.log(TAG, socket log on close success);

});

// 接收数据

socket.on(‘message’, value => {

    console.log(TAG, socket log on message, 收到数据);

});

socket.on(‘error’, err => {

    console.log(TAG, socket log on error, error:${JSON.stringify(err)});

});

await socket.bind({ address: server.ip, port: server.port, family: 1 }).then(() => {

    console.log(TAG, socket log bind success);

}).catch(err => {

    console.log(TAG, socket log bind fail, error:${JSON.stringify(err)} ${JSON.stringify(server)});

});

await socket.connect({

    address: { address: server.ip, port: server.port, family: 1 }, timeout: 6000

}).then(() => {

    console.log(TAG, socket log connect success);

    let promiseExtraOptions = socket.setExtraOptions({

        keepAlive: true,

        OOBInline: true,

        TCPNoDelay: true,

        socketLinger: {

          on: true, linger: 10

        },

        receiveBufferSize: 1000,

        sendBufferSize: 1000,

        reuseAddress: true

    });

    promiseExtraOptions.then(() => {

        console.log(‘setExtraOptions success’);

    }).catch(err => {

        console.log(‘setExtraOptions fail err:’ + err);

    })

}).catch(err => {

    Logger.error(TAG, socket log connect fail, error:${JSON.stringify(err)});

})
4 回复
解决了吗?
请问楼主,问题解决了吗
ets TCPSocket 发送arrayBuffer数据到服务端,服务器接收到的数据非arrayBuffer而是字符串类型。这是为什么。

针对HarmonyOS 鸿蒙Next中ets TCPSocket接收数据缓慢的问题,这通常是由于TCP传输过程中的分包现象导致的。当数据包较大时,它们可能会被拆分成多个小数据包进行传输,这会增加接收整包数据的时间。

为了解决这个问题,你可以尝试以下方法:

  1. 调整接收缓冲区大小:通过socket的setExtraOptions方法增加接收缓冲区的大小(receiveBufferSize),以便能够容纳更大的数据包,从而减少分包的可能性。
  2. 优化网络条件:确保网络连接稳定,减少网络延迟和丢包率,这有助于改善TCPSocket的接收性能。
  3. 处理分包数据:在接收端实现逻辑以处理分包数据,当接收到部分数据包时,将其缓存起来,直到接收到完整的数据包后再进行处理。

请注意,以上方法可能需要根据实际情况进行调整和优化。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部