【问题标题】:Building Java multiplayer server game - difference between sockets and webservice构建Java多人服务器游戏-sockets和webservice的区别
【发布时间】:2011-08-08 10:18:59
【问题描述】:

我正在使用客户端的 Flex 和服务器端的 Java 构建多人纸牌游戏,我想知道我是否必须使用套接字和接受方法才能将用户连接到服务器以便他们加入游戏室或创建一个或聊天。 在过去,我已经学会了如何构建一个双方都是 JAVA 并且连接在套接字中的游戏服务器,但现在客户端将在 FLEX 中,它几乎没有办法连接到 Java 服务器(XML、SOAP、BLAZEDS( AMF)) 而且我发现很难理解如何编写 Java 服务器来完成游戏服务器的所有功能,尤其是管理房间并将数据发送回用户。 在套接字方式中,当用户连接到服务器并打开一个房间时,这个房间是在一个线程上打开的,并且曾经加入过那个房间的人然后连接到同一个线程并将消息发送到正确的位置很容易,所以问题是理解如何使用 SOAP 或 BLAZEDS 来做同样的事情。 任何帮助,将不胜感激。 谢谢。

【问题讨论】:

    标签: java apache-flex


    【解决方案1】:

    请让你的问题简明扼要,很难知道要问什么。

    如果你问 socket 和 webservice 的区别,socket 用于管理基本的网络通信。通过它们,您可以以您选择的任何格式/协议接收/发送字节。

    SOAP/Webservices 只是其中一种格式,它的优点是它是一种标准的消息编码方式,因此您可以轻松编写代码连接到大多数平台上的服务,并且这些消息是人类可读的。主要缺点是性能,包括带宽和处理能力(特别是在接收端解析它)。

    如果您刚开始,我建议您设计一种与您正在使用的应用程序相关的格式以简化事情。

    【讨论】:

    • 感谢您的回答,过去我学会了创建一个双方都在java上的多人java游戏,因此我们使用了套接字。现在我想用 FLEX 制作一个很好的 GUI,它支持 spring、hibernate、blazeDS、XML、SOAP 等……我很难理解的是我如何构建服务器端来管理玩游戏的玩家、管理房间、聊天服务器、数据库访问等不使用套接字?即使我使用 SOAP 或任何其他新方式,我是否需要使用套接字?
    • 所有通信都通过套接字。如果您“手动”编码/解码自己的 SOAP 消息,则需要使用套接字来发送/接收它。大多数情况下,使用像axis这样的库和/或像Tomcat这样已经为您管理套接字的容器很有用。
    【解决方案2】:

    看看RED5 和remoteSharedObjects。使用这项技术,您基本上可以将您的“游戏”对象放在远程共享对象中,并且所有客户端都将拥有相同的对象并实时更新。然后最重要的是,您可以使用 AMF(BlazeDS 背后的协议)来处理不太动态的数据。

    【讨论】:

      【解决方案3】:

      使用原始套接字可以为您带来控制的好处。控制您的协议格式(您的消息数据的结构)。因此,您可以根据您的应用程序要求调整您的消息传递,使其更安全、更快或更健壮。所有这些控制都以复杂性和维护为代价。因为您可以准确地说出您想要发送什么以及您希望如何发送它,所以您需要编写和调试更多代码。原始套接字通信的另一个问题是它被防火墙阻止的可能性要大得多。

      使用网络服务消除了决定消息格式的一些复杂性(这是它的主要好处)。您不必担心字节字节序、字符串编码或数据转换(尽可能多)之类的事情。因此,Web 服务真正擅长于异构客户端和服务器之间的数据通信,其中互操作性是关键。代价是序列化/反序列化相对复杂,因此比二进制消息传递格式慢。当您必须与您几乎无法控制的客户端应用程序进行通信时(实际上并非如此),Web 服务非常适合使用。 Web 服务传统上通过 HTTP 进行隧道传输,因此不必担心防火墙会阻止对您的游戏的访问,这是一个额外的优势。

      BlazeDS 试图在这两个世界之间架起一座桥梁——它为您提供了一些 Web 服务的强大功能(回退通信选项、防火墙互操作性等),但使用它自己的二进制格式进行序列化/反序列化。这给了它使用原始套接字的一些速度,而没有很多缺点。我认为这是一个很好的探索候选者,但如果你发现自己需要更快的速度,那么原始套接字将值得一试。

      祝你好运。

      【讨论】:

      • 感谢您的回答,由于 FLEX 支持 BlazeDS,如何使用 blazeDS 在服务器端实现我需要的功能。网上的所有教程都解释了如何获取 DATAGRID 但这对我没有帮助。我需要一个关于如何构建一个可以处理客户端消息并将消息发送回、处理聊天服务器、游戏室、数据库等的服务器的教程。
      • @Alon - 我所能建议的就是尽可能多地完成教程。然后将你的想法集中在你认为你的服务器应该如何工作的问题上,并制作一个原型。如果您在执行此操作时遇到特殊问题,请返回并在 SO 上发布后续问题。祝你好运。
      【解决方案4】:

      套接字是OSI Level 4 传输层的编程接口。每个人都使用它们,即 Webservices 是一个隐藏较低级别的 7 级应用层接口。

      如果您需要在客户端和服务器之间进行实时双向数据交换,您最好管理自己的 TCP 套接字。 Flex 仍然支持套接字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 2010-10-12
        • 2011-04-20
        • 2011-03-14
        • 2011-07-05
        • 2014-09-17
        相关资源
        最近更新 更多