2

我正在用 Java 构建一个可扩展的服务器端应用程序,但我需要知道“做与不做”。

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

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

我对以下几点有一些疑问:

  • 服务器端是否需要有 GUI 来报告状态、连接性和异常。如果是这样,我该如何实现,我应该使用 Swing 吗?
  • MINA 正在处理连接,但我如何处理数据库(MySQL)?
  • 如何测试此应用程序的可扩展性,如何模拟客户端与服务器的连接。
  • 是否有任何框架可以完成上述所有工作,或者我必须处理每个方面。
4

5 回答 5

3

如何测试此应用程序的可扩展性,如何模拟客户端与服务器的连接。

对于可扩展性测试,我推荐Apache JMeter。它是用于创建和测量应用程序负载的出色、免费且相当简单的工具。您可以获得有关响应时间、每秒事务数、服务器负载等的信息。

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

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

服务器端是否需要有 GUI 来报告状态、连接性和异常。

老实说,服务器端的 GUI可能是矫枉过正。当然,拥有一些带有一堆闪烁的红绿灯和滚动日志的控制台会很整洁,但归根结底,这些都只是 YAGNI 项目。

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

我如何处理数据库(MySQL)?

其他答案有一些很好的建议;这是一个可能更好地涵盖本身的主题,并且有很多关于它的问题。我建议对 ORM+Java 进行一些搜索,以获得一些好的意见。这里有一些不错的链接:

您可以找到对所有不同 ORM 的不同意见,以及根本不使用它们的倡导者。就其本身而言,我没有意见 - 只需在研究选项后使用您认为适合该工作的内容即可。

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

Doubtful,如果有的话,它可能太通用了,无论如何你最终都会为它编写一堆代码。对于 ORM + GUI(如果您确实使用 GUI),有开箱即用的 MVC+数据库 Web 解决方案可以在 JVM 上运行,例如Grails。但是您的大多数问题都涉及不同的问题域,每个问题都需要自己单独的解决方案。

于 2009-11-29T15:52:44.360 回答
2

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

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

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

访问 MySQL 数据库的方法有很多,我敢肯定,有一个框架可以解决这个问题。您也可以尝试休眠,它类似于 .NET 中的 LINQ,但适用于 Java。

如何测试此应用程序的可扩展性,如何模拟客户端与服务器的连接。

你需要一个测试框架,试试 JUnit。

于 2009-11-29T15:17:52.643 回答
2

MINA 是一个优秀的框架。

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

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

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

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

  • 如何测试此应用程序的可扩展性,如何模拟客户端与服务器的连接。

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

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

取决于协议和您想要实现的目标。有一个基于 MINA 的 FTP 服务器,它可以合二为一,但这是一个特定的实现,不适合您的需求。
如果您使用自己的协议,则必须自己实现编码/解码器以及协议和消息的处理。这包括在数据库中存储消息信息。

于 2009-12-01T12:31:00.237 回答
1
  • 如果您认为报告您提到的内容对您的应用程序很重要,那么您可能应该这样做。您可以将 Swing 用作 GUI。如果您在 Web 开发方面更有经验,您还可以让您的服务器应用程序写入数据库,并将其显示在网页上(也可以通过数据库以另一种方式写入)。您所做的选择应该基于您认为您的应用程序将如何发展。

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

  • 我读过 JMeter 是一个在客户端-服务器设置中测试客户端负载的工具。我自己没有试过这个。JUnit 不会帮助您衡量这一点。

于 2009-11-29T15:22:23.040 回答
1
  • 服务器端是否需要有 GUI 来报告状态、连接性和异常。如果是这样,我该如何实现,我应该使用 Swing 吗?

不,它不必。异常应该放在日志文件中。当客户请求时,可以在简单的控制台中报告状态。还有连接信息。换句话说,(Swing)GUI 可能很方便,但无论如何你都应该从低级别的东西开始,它是一个低优先级的功能,很高兴拥有。

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

我不知道这个问题是关于数据库连接还是数据库访问。如果是关于数据库访问,取决于您将要执行的操作的复杂性和 OO 性,ORM 可能是个好主意,或者不是,在这种情况下,您可能更喜欢原始 JDBC。没有更多细节,虽然不可能回答。如果是关于数据库连接处理,也许使用像 c3p0 这样的连接池,但忘记 JNDI。

  • 如何测试此应用程序的可扩展性,如何模拟客户端与服务器的连接。

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

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

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

于 2009-11-29T16:14:08.780 回答