当前位置: 首页 > 知识库问答 >
问题:

C# MMO服务器结构

葛阳
2023-03-14

我正开始为演示游戏编写一个简单的mmo服务器。我正在使用UDP协议(UdpClient ),但我想知道,其他服务器是如何工作的?:

  1. 只有 1 个 UDP 客户端处理所有连接的客户端和消息并响应它们
  2. 服务器为每个连接的播放器创建一个新的 UDP 客户端实例?

测试了连接50个发送“Ping”消息的客户端,服务器必须用“Pong”回复。第50个“Pong”发送大约需要10秒(在本地主机上)(同时,服务器也应该向第一个玩家发送ping,所以排队时间可能会延长到几个小时,这是荒谬的)

共有3个答案

阎昌勋
2023-03-14

你一定做错了什么。我编写了一个服务器,每秒处理400万条ping/pong消息,每条消息的传递时间为10-20毫秒。我使用的是TCP协议。

我建议你阅读Beej的套接字编程指南,重写你的客户机/服务器网络代码,看看你是否能得到更好的数字:http://beej.us/guide/bgnet/

栾烨华
2023-03-14

我将通过说我不知道MMO服务器的内部结构来限定我的答案。我有点惊讶 50 ping/pong 需要 10 秒,我认为,尤其是在本地主机上它会快得多。我怀疑您有某种问题,或者您的客户初始化起来特别复杂。我建议你下载类似Wireshark(http://www.wireshark.org/)的东西,看看你的IP流量,看看到底发生了什么。

如果您玩MMO游戏,您还可以使用wireshark查看正在传输的数据包,并更好地了解他们的服务器在做什么。

漆雕昊天
2023-03-14

其他服务器使用 1),即从具有一个套接字的任何客户端侦听(我假设每个 UdpClient 有一个)。此外:

    < li >这一个套接字应该在服务器的整个生命周期内使用,也就是说,在使用一个数据报时不要创建新的套接字。 < li >接收和发送应该异步完成,以便接收/发送一个流不会阻碍接收/发送另一个流。 < li >注意您发送/接收的数据量-如果您从服务器向多个客户端发送/接收数据,数据总量将乘以客户端数量。

假设其他进程没有使处理器最大化,则在 50 个客户端发送 ping 并接收只有几个字节的 pong 的本地主机上执行上述操作应该花费不到 1 毫秒的时间。

 类似资料:
  • 我们正在为我们的机构创建一个MMO风格的虚拟校园,我需要一些关于使用UNet的最佳实践和实施的建议。阅读后,我得出的结论是,我可能应该使用一个带有单独场景的项目进行服务器构建。所以我设置了它,它立即运行并启动一个专用服务器。然后,游戏场景会自动连接,但即使玩家已添加到网络管理器中,也不会实例化玩家。服务器场景只是一个带有 UNet 网络管理器组件的空白场景。 我对这种情况的看法是,为了更好的用户体

  • 我曾尝试搜索如何制作 MMO,但总是找到相同的回复,这是不可能的或需要很多钱,但从未给出如何制作指南。 我想构建一些非常可扩展的东西,我目前关于如何构建 MMO 的想法如下: 组件: 登录服务器:客户端发送用户名 行动: 登录: 客户端发送用户名 < li >客户端在Position DB中检查他当前的位置和动作以及他附近的人(玩家和怪物),收到的数据还包括玩家的上次更新时间(装备或等级)。 <

  • 一面 1.跳表实现原理 2.还有什么方法实现快速查找 3.RAII是什么,智能指针,如何解决循环引用 4.移动语义,需要怎么实现 5.stl 中 vector,list迭代器失效,有什么区别 6.最小堆如何实现插入,删除 7.哈希表如何实现 8.红黑表如何实现 9.伪线程是什么 10.玩什么游戏 11.有什么游戏相关的比赛 20min,面完秒挂,

  • 在 Serenity 中,服务终结点是 ASP.NET MVC 控制器的一个子类。 这是 Northwind 的 OrderEndpoint 摘录: namespace Serene.Northwind.Endpoints { [RoutePrefix("Services/Northwind/Order"), Route("{action}")] [ConnectionKey("N

  • 我们收到了这段代码,应该对其进行修改,以便无论何时客户端连接到服务器并发送消息,服务器都应该回复我听到了,伙计。这适用于一个或多个客户机,但下一个任务是,当新客户机连接时,服务器应该告诉所有其他已连接的客户机。 我以为这会很容易,但结果并不像我想象的那样。由于服务器总是得到sock 3,第一个客户端得到4,第二个客户端得到5等等,所以我尝试创建一个for循环,每当一个新客户端连接时,该循环就会向4

  • 我对Azure Service Fabric有问题。 我已经安装了它(在Windows 7上),正如https://azure.microsoft.com/en-gb/documentation/articles/service-fabric-get-started/. 但是当我尝试从Visual Studio运行Service Fabric应用程序时,我看到Windows服务Microsoft