最小化通过网络(socket.io)发送的数据

时间:2019-11-19 00:37:20

标签: javascript node.js networking socket.io arraybuffer

嘿有stackoverflow:)

我正在使用node-js和socket.io构建一个相当简单的网络游戏。 我试图使用ArrayBuffers来最大程度地减少通过网络发送的字节数,到目前为止效果很好。但是我注意到我不了解的一件事。

如果我使用ArrayBuffers从客户端向服务器发送程序包,则每个程序包使用5字节,但是之后socket.io直接发送另一个大约50字节的程序包。例如,我分析了通过agar.io上的套接字发送的数据,它们每个包仅发送约13个字节,仅此而已。这与socket.io有关吗?

在我的案例中,第二个软件包包含该主题。那我想念什么?

要测试的代码:

//服务器

let IO = require("socket.io");
let http = require("http");

let server = http.createServer();

let io= IO(server);

io.on("connection", (s) => {
    console.log("connection");

    s.on("test", () => {
        console.log();
    })
})

server.listen(80, () => {
    console.log("running");
});

//客户

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
</head>

<body></body>

<script>
    let socket = io("http://localhost");
    let arrBuffer = new ArrayBuffer(2); //2 is used here because in my game I just need 2 bytes per tick


    setInterval(() => {
        socket.emit("test", {test: arrBuffer});
    }, 500);
</script>
</html>

测试的“网络”选项卡:(在此位置,您会看到每3字节包之后的第二个包) enter image description here

agar.io上的“网络”选项卡(仅上传13个字节,仅此而已) enter image description here

感谢您的每一次帮助。

1 个答案:

答案 0 :(得分:1)

我一直在使用ws包发送序列化的数组缓冲区,并且没有发送额外的字节。想尝试交换实现并查看有效载荷是否减少了?

https://github.com/websockets/ws