【问题标题】:where to place logic in a server/client program在服务器/客户端程序中放置逻辑的位置
【发布时间】:2014-03-06 02:46:12
【问题描述】:

我正在用 java 创建一个简单的基于文本的多人游戏。

我想要一个服务器程序,它是每个客户端之间所有通信的中心枢纽。

我想知道我应该把大部分逻辑放在哪里?客户?服务器?服务器应该只是一个提供客户端请求的任何信息的程序吗?或者客户端程序是否应该简单地将用户的命令转发到服务器并让服务器决定从那里做什么。 ?

此外,目前,客户端和服务器套接字都简单地使用 ObjectOutputStream/ObjectInputStream 在彼此之间来回发送字符串“命令”以确定用户请求的命令。客户端和服务器之间的首选通信方法是什么? XML 包含类似 sql 的语法?

例如: 假设客户端 A 想要攻击客户端 B。目前:我从客户端向服务器发送一个字符串,看起来像这样

"a 攻击 b 1321"

1321 = 客户端 B 在数据库中的位置。

【问题讨论】:

  • 这个问题的任何答案都将是一本关于游戏设计的书。

标签: java xml sockets text


【解决方案1】:

这个问题过于宽泛,无法给出明确的答案。话虽如此,任何具有良好黑客技能的不诚实玩家可能会破坏的计算都应该在服务器上完成,或者至少在那里进行检查。例如,第一人称射击游戏可能会在客户端进行所有物理计算,并将每次射击的结果报告给服务器,以便它可以转发给其他客户端。服务器不必检查客户认为未命中的镜头,但它至少需要对客户认为命中的镜头进行基本的碰撞检测。

关于是否允许玩家获取资源的决定当然应该在服务器上做出。

我的基本经验法则是尽量让服务器不进行不必要的计算,但要执行那些需要安全性或服务器上的整体即时游戏状态的计算。

【讨论】:

  • 就实际交流而言。一个简单的来回字节流会是一个好方法吗?
  • 字节、文本、JSON、XML - 只要客户端和服务器可以编码和解码,任何东西都可以工作。我已经成功地使用了其中的每一个。如果您需要节省带宽,请不要使用 XML。
猜你喜欢
  • 2012-08-09
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2011-10-16
  • 2019-11-15
相关资源
最近更新 更多