c# - 对于最多 32 位玩家同时使用 C# 进行游戏的专用服务器,异步 TCP 网络是否是更好的选择?

标签 c# asynchronous xna system.net system.net.sockets

目前我正计划用 C# 为 XNA 游戏设计一个专用服务器,最多 32 个玩家可以同时连接。我有过使用 System.Net 建立网络的经验,但我以前从未与大量玩家打过交道。

我从心里知道创建和销毁线程(尤其是每个玩家一个)不是一个好主意,而且由于“没有线程时排队等候”,我不确定是否使用线程池可用”的性质。因此,我决定(几乎是我唯一的最后一个选择)使用 Async 来处理大量客户端。

但我仍然不确定这是否是一个明智的选择,或者我是否应该使用其他东西来满足我的苛刻需求。

如果这个问题听起来很糟糕,我深表歉意,但我很困惑 - 非常感谢您的帮助!

最佳答案

如果游戏的限制确实是 32 个并发用户,也许还有少数观察者,那么线程就没问题,尤其是当您发现使用线程比回调更容易编写代码时。 (您必须适本地使用 coordinate access to shared data structures,并且其复杂性可能超过相应的 event-based 设计。)

我什至不会为只有 32 个并发用户的线程池烦恼。

线程的吞吐量限制显示大约 100 个线程(当然,取决于实现细节)。如果您从不打算同时使用 100 个用户(例如,这将是一个负载很轻的 IRC 服务器),那么就不需要异步事件模型,除非您和您的团队对事件模型更放心。

关于c# - 对于最多 32 位玩家同时使用 C# 进行游戏的专用服务器,异步 TCP 网络是否是更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949916/

相关文章:

c# - .NET Core 中的专用路由无法识别,生成 404

c# - 文档 ID : string or Int?

python - 获取scrapy上不同部分的数据列表

c# - 将文本修剪为特定大小

c# - Entity Framework 存储过程 - 映射复杂属性

c# - 事件处理程序影响 CLR 中的垃圾回收

javascript - UI-Router 的 Angular Service 异步单例

javascript - 在 Javascript 中创建用于采样数据的时间戳对象数组?

visual-studio-2010 - 在 XNA 4.0 中以给定点周围的半径为地形模型着色

c# - 通过制作一个网格优化绘图 3d 模型