我正在使用Java构建可扩展的服务器端应用程序,但我需要知道“Do's and the Dont's”。
应用程序需要客户端通过TCP套接字连接到服务器,我听说很多关于Apache MINA的好东西,所以我想我会试一试并围绕这个进行构建。我还需要应用程序与数据库进行通信,并根据请求或推送将适当的数据发送给客户端。
我会管理我自己的家庭服务器,所以即使这样也在我的控制之下。
我对以下内容有些怀疑:
答案 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采样器将完成这项工作。
- 是否有任何框架可以执行上述所有操作,或者我是否必须处理每个方面。
正如我所说,没有更多细节,就不可能提供更具体或更准确的答案。