嘿有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字节包之后的第二个包)
agar.io上的“网络”选项卡(仅上传13个字节,仅此而已)
感谢您的每一次帮助。
答案 0 :(得分:1)
我一直在使用ws
包发送序列化的数组缓冲区,并且没有发送额外的字节。想尝试交换实现并查看有效载荷是否减少了?