gpt4 book ai didi

node.js - 使用 node.js/socket.io 构建实时大型多人游戏有多昂贵?

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:54 25 4
gpt4 key购买 nike

您好,我正在尝试使用 node.js 和 socket.io 构建实时多人游戏。

现在,在编码方面实现自己不会有太大问题,但是来自传统的 http 请求-响应网络编程模型,我不知道这在流量和服务器负载方面会有多昂贵.基本上在游戏过程中,玩家的浏览器应该跟踪实时鼠标输入事件,并不断将它们广播给同一游戏中的所有其他玩家。

举个例子,假设我的头像在屏幕上跟随我的鼠标指针,它应该实时广播给屏幕上的其他玩家。我会做类似的事情:

// client side
$(document).on("mousemove", function(event){
io.emit("coordinate", {x: event.pageX, y: event.pageY});
});

在服务器上:

// server side
io.sockets.on("connection", function(socket){
...
socket.on("coordinate", function(coordinate){
socket.get("username", function(err, username){
socket.broadcast.emit("move", {username: username, coordinate:coordinate});
});
});
...
});

我认为这应该可行,但这需要浏览器每秒向服务器发出多个事件,服务器随后应将它们广播给同一游戏中的其他玩家,我担心这会产生什么影响。不过有一件事是传输的每个数据片段的大小并没有那么大(基本上它只是一个 x 和 y 坐标)。如果这太贵了,这游戏再好,我想我也出不了。谁能启发我?谢谢。

[编辑] 澄清一下,我不是在问如何让这个架构更有效率。我只想知道这种类型的系统在系统负载(和维护成本)方面是否足够现实对于普通的网络服务,我可以通过查看页面浏览量来估算成本,但我不知道 websocket 是一个全新的领域的,所以我想问一下。

最佳答案

警告:下面的所有数字都是估计的,并且在很多地方都有管理费用,但应该给你一个起点。

如果您所做的只是在连接之间来回推送数据,那么服务器似乎不太可能成为您的瓶颈。我认为您会在带宽方面遇到第一堵墙(在播放器端和/或数据中心端)。

假设每个用户平均每秒 25 次 推送鼠标数据,这意味着每个用户将下载玩家 x 25 每秒。假设每条鼠标移动消息为 100 字节并且有 20 个玩家,这意味着您(天真地)下载 ~50kb/秒,这是相当高但可以实现的。我天真地说是因为会有开销,但是通过良好的连接感觉是可以实现的。

下载带宽与玩家数量呈线性关系,因此在 100 个玩家时,客户端的下载带宽更接近 250kb/s,服务器端的下载带宽更接近 22Mb/s

如果您需要更多玩家,您将需要进行优化,例如修剪消息,数据压缩,限制鼠标采样速度等。

关于node.js - 使用 node.js/socket.io 构建实时大型多人游戏有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com