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

如何组织.NET在线MMORPG服务器和客户端之间的交互

茅曾琪
2023-03-14

我目前正在考虑构建一个简单的MMORPG。

这个想法是拥有一个 .NET 服务器和可下载的客户端应用程序。

组织客户端-服务器交互的最简单而有效的方法是什么?

我想到了一个网络服务,但只要客户端必须快速执行许多游戏操作(例如移动、拾取物品、攻击其他玩家等),它看起来效率很低。

创建自定义通信协议是一项非常复杂的任务。

是否存在现成的解决方案?

共有1个答案

夹谷浩宕
2023-03-14

我对游戏通信协议的开发不是很有经验,但是,因为这里有一段时间没有出现答案,我可以和你分享我的观点。

通信协议选择

我想你可以把两种交流方式结合起来:

  • UDP用于需要快速接收并且您经常发送的信息,因此丢失单个数据包不成问题。您可以使用UDP发送信息,例如:动画的玩家移动位置
  • TCP用于重要且您必须确保收到的信息,例如捡起的物体、玩家撞击其他玩家、任务开始/完成等。

选择要发送的数据

另一件要记住的重要事情是发送最小量的数据,所以最好只发送X;y表示玩家位置,而不是序列化整个玩家对象;).

设计通信 API 并在服务器和客户端之间划分责任可能取决于一些事情,例如游戏类型和安全性与性能:执行更多计算并将更多责任放在客户端可以提高服务器性能,但会降低游戏的安全性,因为这样更有可能有人试图作弊)。

一些示例链接只是为了让您开始:

  • 套接字类
  • System. Net类的最佳实践
  • Tcp客户端类
  • Udp客户端类
  • 网络编程示例(有一个使用Socket类的示例)
 类似资料:
  • 问题内容: 简而言之,我有一个独立的ES主实例和一个在我的Java应用程序中创建的客户端节点。如果在客户端节点之前启动了独立ES实例,则客户端节点会正确发现独立ES实例。 我面临的问题是-如果由于某种原因,客户端节点在独立ES实例之前启动,我会看到“ MasterNotDiscoveredException”,这也是可预期的。但是,即使启动独立的ES实例后,我仍然会看到相同的异常。我应该更改一些配

  • 问题内容: 我用Node.js运行一个简单的http服务器: 我的index.html文件: 现在,我想在我的index.html文件中打印服务器端变量:temp。但是我不知道该怎么做。 也许有人可以帮助我从服务器到客户端交换变量。 问题答案: 正如您可以在@WebServer的答案中看到的那样,节点中有多种模板引擎。 我想给你一个使用其中一个的例子-EJS: 首先安装它: server.js:

  • 我目前正在做一个项目,需要一个UDP通信之间的服务器亚马逊法兰克福)和几个主机(Arduino)。我需要能够发送JSON数据从服务器到主机通过UDP,它需要实时工作(时间是一个真正的限制在这里)。此外,主机将定期与服务器通话,通知服务器其状态。 我面临的问题是,虽然我可以ping服务器,但当我创建带有端口的UDP套接字时,我会得到这个错误(对于任何端口): errno99:无法分配请求的地址 我也

  • 我有一个java服务器应用程序,可以通过与多个客户端通信。在这个通道上,客户端发送请求,服务器发送应答。现在我想添加一个功能,服务器可以将文件发送到客户端。我不想通过用于通信的套接字发送,所以在一个客户端和一个服务器之间使用更多套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗? 还是有更好的办法?

  • 我必须用JS制作一个应用程序,用AES编码一条消息,并通过AJAX将其传递给服务器。然后,服务器会启动并使用Java对消息进行解码。 我的问题是:如何在JS中加密消息,并使用AES在Java中解密它?知道java和js之间的通信已经通过Web服务建立 客户端,我使用Crypto JS库(http://code.google.com/p/crypto-js/)。服务器端我使用Java提供的Ciphe

  • 我目前正在编写一个客户端/服务器Web应用程序使用JavaServlet和Python。虽然我在客户端交互方面遇到了问题,主要是在生成输入方面。生成输入需要通过在客户端本地执行python脚本来修改用户输入的数据,然后通过POST请求提交给Servlet服务器。在此之后,Servlet将把接收到的数据传递到另一个python脚本服务器端,以验证给定输入的有效性。Python在这个过程中是必要的,因