Java Server Side App,如何?

时间:2009-11-29 15:00:21

标签: java apache-mina

我正在使用Java构建可扩展的服务器端应用程序,但我需要知道“Do​​'s and the Dont's”。

应用程序需要客户端通过TCP套接字连接到服务器,我听说很多关于Apache MINA的好东西,所以我想我会试一试并围绕这个进行构建。我还需要应用程序与数据库进行通信,并根据请求或推送将适当的数据发送给客户端。

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

我对以下内容有些怀疑:

  • 服务器端是否需要拥有 GUI,报告状态,连接 和例外。如果是这样,我该怎么做 实现这一点,我应该使用Swing吗?
  • MINA正在处理连接但是 我该如何处理数据库(MySQL)?
  • 我怎么能测试这个应用程序 可扩展性,我该如何模拟 客户端与服务器的连接。
  • 有没有可以做的框架 所有上述或我必须 处理每个方面。

5 个答案:

答案 0 :(得分:3)

  

我怎样才能测试这个应用程序   可扩展性,我该如何模拟客户端   与服务器的连接。

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

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

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

  

服务器端是否需要GUI,   报告状态,连接和   异常。

老实说,服务器端的GUI 可能是矫枉过正。当然,拥有一些闪烁的红色和绿色灯光以及滚动日志的控制台是很巧妙的,但当它归结为它时,那些都只是YAGNI项目。

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

  

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

其他答案有一些好的建议;这是一个可能更好地涵盖的话题,并且有很多问题要问。我建议你做一些搜索ORM + Java 以获得一些好的意见。以下是一些不错的链接:

您可以在所有不同的ORM上找到不同的意见,以及根本不使用它们的提倡者。我本身没有任何意见 - 在研究选项后,只需使用你认为合适的工作。

  

是否有任何可以做到的框架   以上或我必须处理   每个方面。

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

答案 1 :(得分:2)

  

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

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

  

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

有很多不同的方法可以访问你的MySQL数据库,我相信它有一个框架。你也可以试试hibernate,就像.NET中的LINQ,但是对于Java。

  

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

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

答案 2 :(得分:2)

MINA是一个很好的框架。

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

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

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

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

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

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

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

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

答案 3 :(得分:1)

  • 如果你认为这对你很重要 申请报告的事情 你提到的,你可能 应该。您可以使用Swing作为GUI。如果 你在网络上更有经验 发展,你也可以做你的 服务器应用程序写入数据库, 并在网页上显示(和 也写了另一种方式,通过 数据库)。你做出的选择 应该基于你的想法 应用程序会发展。

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

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

答案 4 :(得分:1)

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

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

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

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

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

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

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

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