代码之家  ›  专栏  ›  技术社区  ›  Kevin Boyd

Java服务器端应用程序,如何实现?

  •  2
  • Kevin Boyd  · 技术社区  · 14 年前

    我在Java中构建一个可扩展的服务器端应用程序,但是我需要知道“DO和No”。

    这个应用程序需要客户机通过TCP套接字连接到服务器,我听说了很多关于ApacheMina的好消息,所以我想我应该尝试一下并围绕这个进行构建。我还需要这个应用程序与数据库通信,并在请求或推送时向客户机发送合适的数据。

    我会管理自己的家庭服务器,这样即使是在我的控制之下。

    我对以下问题有些怀疑:

    • 服务器端是否需要 GUI,报告状态,连接 以及例外情况。如果有,我该怎么办 执行此操作,我应该使用Swing吗?
    • Mina正在处理连接,但是 如何处理数据库(MySQL)?
    • 我如何测试这个应用程序 可伸缩性,如何模拟 与服务器的客户端连接。
    • 有什么框架可以做吗 以上都是,还是我必须 处理每个方面。
    5 回复  |  直到 14 年前
        1
  •  3
  •   Community Egal    7 年前

    我如何测试这个应用程序 可伸缩性,如何模拟客户机 与服务器的连接。

    对于可伸缩性测试,我建议 Apache JMeter .它是一个优秀的、免费的、非常简单的工具,可以在应用程序上创建和测量负载。您可以获得有关响应时间、每秒事务数、服务器负载等的信息。

    我在HTTP应用程序中使用过很多。对于TCP应用程序,它有一个TCP采样器,但是使用已经编写的连接代码可能更容易为它的Java采样器创建一个实现。我还建议将它与 rstatd sampler plugin 所以您可以在测试期间测量服务器CPU/内存。

    熟悉这个工具可能需要几天时间,但它对我很有帮助。

    服务器端是否需要一个GUI, 报告状态、连接和 例外情况。

    老实说,服务器端的GUI是 可能是杀戮过度 .当然,如果有一种控制台,它有一堆闪烁的红绿灯和滚动的日志,那就太好了,但是当它降到最低时,这些都只是雅格尼的物品。

    只要您的服务器正在为您想要跟踪的事务和事件编写日志和审计信息,这就足够了。拥有一个GUI只会增加服务器的复杂性,可能会产生更多的错误。另外,如果您有效地使用日志,那么您可以插入其他监视/警报机制(例如,SNMP)。

    如何处理数据库(MySQL)?

    其他答案有一些好的建议;这是一个可能更好地单独讨论的主题,并且有很多关于它的问题被问到。我建议你做些 搜索ORM+Java 以获得一些好的意见。以下是一些不错的链接:

    您可以在所有不同的表单上找到不同的观点,以及不使用它们的倡导者。从本质上来说,我没有什么意见——只是在研究了各种选择之后,使用你认为适合这份工作的东西。

    有什么框架可以做到所有 或者我必须处理 各方面。

    可疑的 如果有的话,它很可能是通用的,你最终会为它编写一堆代码。对于ORM+GUI(如果使用GUI),有一些现成的MVC+数据库Web解决方案可以在类似JVM的平台上运行 Grails . 但大多数问题涉及不同的问题领域,每个领域都需要自己的独立解决方案。

        2
  •  2
  •   Jim Ferrans    14 年前

    服务器端是否需要有一个GUI来报告状态、连接和异常。如果是这样,我该如何实现这一点,我应该使用Swing吗?

    您不必使用GUI端,只需将日志写入文件,或者使用其他日志服务器,如Windows事件日志。

    mina正在处理连接,但我如何处理数据库(mysql)

    我敢肯定,有很多不同的方法可以访问你的MySQL数据库,Swing对此有一个框架。您也可以尝试Hibernate,它类似于LINQ .NET,但适用于Java。

    我如何测试这个应用程序的可伸缩性,如何模拟客户机与服务器的连接。

    您将需要一个测试框架来实现这一点,请尝试JUnit。

        3
  •  2
  •   Hardcoded    14 年前

    Mina是一个优秀的框架。

    • 服务器端是否需要有一个GUI来报告状态、连接和异常。如果是这样,我该如何实现这一点,我应该使用Swing吗?

    简短回答:不!
    长话短说:一个正常的服务器没有图形用户界面,因为大多数大型服务器系统甚至根本没有显示。更好的解决方案是使用JMX提供统计信息。Mina有预定义的MBean,您只需将其添加到JMX服务中即可。使用JMX客户机,您可以访问这些信息并构建一个GUI。
    只需试试JConsole,选择一个本地Java应用程序来了解它。

    • mina正在处理连接,但我如何处理数据库(mysql)?

    有很多方法可以处理数据库。纯JDBC、Hibernate或其他ORM框架。只要确保你使用的东西是线程安全的!

    • 我如何测试这个应用程序的可伸缩性,如何模拟客户机与服务器的连接。

    要么编写一个简单的客户机并启动上千次,要么使用一个专门的测试框架。如果您使用的是现有的协议,那么可能有一个特定的协议。

    • 是否有任何框架可以完成上述所有工作,或者我必须处理每个方面。

    取决于协议和您想要实现的目标。有一个基于mina的ftp服务器,它可以实现所有功能,但这是一个特定的实现,不适合您的需要。
    如果您使用自己的协议,则必须实现en-/decoder,并自行处理协议和消息。这包括在数据库中存储消息信息。

        4
  •  1
  •   Yngve Sneen Lindal    14 年前
    • 如果你认为这对你的 申请上报 你是说,你可能 应该。您可以使用Swing作为GUI。如果 你在网络上更有经验 发展,你也可以 要写入数据库的服务器应用程序, 并将其显示在网页上(和 也可以用另一种方式写,通过 数据库)。你的选择 应该以你的想法为基础 应用程序将不断发展。

    • 如果您的数据库操作受到限制,您可以只使用普通的旧JDBC库,它将为您提供在MySQL数据库中执行写入/读取操作所需的类。如果您认为您的应用程序的大小/复杂性将在某种程度上增加,您可能需要考虑 ORM 某种类型的(例如冬眠)。

    • 我已经读到JMeter是一个在客户机-服务器设置中测试客户机负载的工具。我自己也没试过。JUnit不会帮你测量这个。

        5
  •  1
  •   Pascal Thivent    14 年前
    • 服务器端是否需要有一个GUI来报告状态、连接和异常。如果是这样,我该如何实现这一点,我应该使用Swing吗?

    不,不必。异常应该放在日志文件中。当客户端请求时,可以在简单控制台中报告状态。以及连接信息。换句话说,一个(Swing)图形用户界面可能很方便,但是无论如何,您应该从低级别的东西开始,这是一个低优先级的特性,非常好。

    • mina正在处理连接,但我如何处理数据库(mysql)?

    我不知道这个问题是关于数据库连接还是数据库访问。如果是关于数据库访问的,根据您将要做的事情的复杂性和OOness,ORM可能是个好主意,或者不是,在这种情况下,您可能更喜欢原始JDBC。如果没有更多的细节,就不可能回答。如果是关于数据库连接处理的,可以使用像c3p0这样的连接池,但不要使用jndi。

    • 我如何测试这个应用程序的可伸缩性,如何模拟客户机与服务器的连接。

    为此,正如其他答案中建议的那样,jmeter及其tcp采样器将完成这项工作。

    • 是否有任何框架可以完成上述所有工作,或者我必须处理每个方面。

    正如我所说,没有更多的细节,就不可能给出更具体或更精确的答案。