问题标签 [enet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Enet:enet 可以处理多少个连续的连接?
我正在使用 Godot 游戏引擎创建多人游戏,它支持 UDP、TCP 和 websockets。根据我的研究,UDP 是唯一可靠的,他们使用 Enet。
我没有从 godot 社区得到关于 Enet 可以处理多少连续连接的决定性答案,许多人使用每个房间的 docker 创建一个新的服务器实例,我不喜欢这样
我想每个房间有 8 个玩家,在我必须创建一个新的 docker 实例之前,Enet 可以处理多少个连续连接?如果没有好的答案,我想在创建实例之前知道最安全的选择。
amazon-web-services - 如何扩展 Enet (UDP)?
enet 的创建者告诉我,每个主机 enet 可以处理 4000 个连接,操作系统将无法管理更多。如何超越它?
如果我使用 docker 容器,它们仍然使用相同的操作系统,对吗?所以我还没有真正解决任何问题,或者我可以吗?docker 容器是否被视为自己的操作系统?
如果我使用EC2,我也不解决它吗?我将使用一个操作系统,对吗?我想尝试解决这个问题而不必购买多个专用服务器,有没有办法做到这一点?使用云托管还是容器?
godot - 如何使用高级多人游戏 (ENET) 在不同坐标处生成两个节点?
目前,我正在使用带有 Godot 的高级多人游戏 (ENET) 来生成两个玩家节点(使用 KinematicBody2D 和碰撞)。由于碰撞导致问题的原因,我不能让玩家在相同的坐标中产卵,所以我试图让它们彼此相邻产卵。
我把我的 Player.gd 放在这个pastebin 链接上,它有我要调试的代码。
我遇到的问题是试图让客户端和服务器在我在玩家场景初始化时设置的坐标处生成玩家。目前,客户端和服务器可以正确定位自己,但其他玩家在 (0,0) 处闲逛,直到我移动玩家。
玩家运动完美无缺,因此即使该代码在粘贴中,它也与这个问题无关。
客户的标准输出是
服务器的标准输出是
c++ - 故意泄漏 std::vector 的内存
我需要找到一种方法来故意泄漏(拥有) a 的内部指针,std::vector
以便它的生命周期超过原始容器的生命周期,以便以后可以手动删除它。
为什么?我正在使用需要在短时间内发送大量数据包的 C ENet 库开发网络应用程序。
我通过将数据写入std::vector<unsigned char>
.
然后为了创建一个“数据包”,我使用了这个enet_packet_create
函数,它接受一个指向要发送的字节数组的指针及其大小。在正常操作模式下,该函数只是在堆上动态复制给定数组,但还有一个“不分配”选项,它只接受指针和大小,使用回调函数将删除留给创建者,这正是我正在努力实现 - 数据已经存在于可以使用的向量中,因此无需再次复制它,因为它可能很昂贵。
python - “TypeError:‘元组’对象不可调用”
所以我正在尝试制作一个 Growtopia 服务器模拟器,但实际上我得到了这个令人困惑的错误。我找不到任何关于...
这是我的代码
c++ - 为什么我收到错误,包括 MSVS2019 上的 ENet 库
我想在我的 VS2019 中包含ENet。我包含了它的 lib 和目录,并将它的 lib 包含在 Addition Dependencies 但我有这个
我的代码:
c++ - 用于多人游戏的可扩展登录/大厅服务器
我正在开发一个多人游戏(客户端-服务器模型),但在扩展其服务器时我陷入了困境。
我知道大多数游戏甚至从未达到 10 000 多名玩家,我认为我的游戏也不会。虽然如果我很幸运能得到这个,我想开发服务器,这样它们以后就不会成为一个巨大的障碍。
我在互联网上搜索了很多关于我的问题的解决方案,查看了 GDC 的讨论并查看了该网站上的其他帖子,但似乎没有一个能解决我的具体问题。
我当前的设置如下,所有服务器都是用 C++ 编写的,使用 ENet 作为我的网络库。
游戏服务器
该服务器处理游戏的实际游戏玩法,需要在服务器与其连接的客户端之间发送大量 CPU 和数据包。但是这个专用服务器是由玩家自己托管的,所以我根本不需要考虑扩展它。
大厅服务器
此服务器处理服务器列表,其中包含当前启动的所有服务器。
所有游戏服务器每 5 秒向该服务器发送一个 UDP 数据包,表示它们还活着。这样大厅服务器就可以保留当前在线的所有服务器的更新列表。
当所有客户端想要获取所有服务器时(仅在服务器列表屏幕中),所有客户端都向该服务器发送 UDP 包,并且大厅服务器发回所有服务器的列表。这种情况不会经常发生,并且大厅服务器被限制为每秒向客户端发送 4 个服务器(而不是包含所有服务器的大包)。
登录服务器
该服务器处理创建帐户、丢失密码、登录、朋友和他们当前的游戏状态、给其他登录玩家的私人消息以及指定他们拥有哪些游戏内物品的玩家资料。
所有客户端每 5 秒向该服务器发送一个 UDP 数据包,表示他们还活着,同时还发送他们当前所在的游戏。然后服务器将他们的好友列表发送回在线/离线/游戏中状态。这样他们的朋友就可以保留在线/离线/游戏中的朋友的更新列表。
它只发送带有玩家操作的消息,例如创建帐户、登录、更改/重置密码、添加/删除/忽略朋友、给朋友的私人消息等。
我的问题
我担心的是我的大厅和登录服务器可能无法扩展,并且它们的流量会太大。
1.理论上它们可以只托管在一台计算机上吗?还是对 10 000 多名玩家来说流量太大了?
2.如果它们可以托管在一台计算机上,那么对于住在远方的人来说,服务器是否仍然没有问题?
在这种情况下,每个地区都有大厅和登录服务器会更好吗?不好的是,如果玩家住在欧洲,他们将无法看到美国的服务器,并且他们的帐户和物品将不存在于其他服务器上。
3.可能有点牵强,但如果我将两台服务器都重写为位于具有数据库的网站上,并让客户端/游戏服务器改为执行 Web 请求(例如 HTTPS 或调用具有特定标头的 php),会不会以某种方式帮助解决我的问题?
machine-learning - 为什么扩张卷积在计算上是高效的?
我一直在研究受 UNet 启发的架构 ENet,我认为我遵循基本概念。ENet 效率的基础是空洞卷积(除其他外)。我了解保留空间分辨率,如何计算等等,但是我不明白为什么它在计算和内存方面比例如最大池便宜。
c++ - 在enet中指定回调函数
ENet 库具有可以发送的数据包,并在完成发送特定数据包后包含一个回调函数。
http://enet.bespin.org/structENetPacket.html#ad602d6b6b35ef88b2b2e080fa5c9dc3d
回调本身:
现在我想创建一个类来保存用于发送这些数据包的主机,并跟踪成功发送了多少数据包。
这不会编译:Error C3867 Sender<int32_t>::callbackPacket': non-standard syntax; use '&' to create a pointer to member
当我尝试
我明白了Error C2440 '=': cannot convert from 'void (Sender<int32_t>::* )(ENetPacket *)' to 'ENetPacketFreeCallback'
我只是不明白当数据包完成后调用 Sender 对象方法的数据包的正确代码是什么。
python - 是否可以将数据包发送到 exe 文件?还是控制一个?
我想以某种方式在后台控制游戏。为此,我要么需要向它发送数据包,即 ENet 数据包。或者在后台控制它,因为将它作为焦点窗口很烦人。我不知道从哪里开始,也不知道该怎么做,非常感谢任何帮助。