java - 选择java网络框架的建议

标签 java network-programming

简短版本:需要有关为用户/请求数量较少且数据量相对较大的客户端/服务器应用程序选择 Java 网络框架的建议(优点/缺点)。

可能的选项:

  1. RMI
  2. Apache 河
  3. Netty(这个看起来更面向异步,它可以做同步调用吗?)
  4. 还有其他框架可以让我的生活更轻松吗? :)

长版:我当前从事的项目是一个用java编写的桌面应用程序,允许用户优化供应链的一部分。请注意,到目前为止,该应用程序仅是桌面应用程序。它在本地计算机上安装了一个数据库,仅此而已。现在我们有新的要求来更改代码以支持共享/网络数据库。在网络服务器上安装数据库并启动应用程序的多个实例(正如预期的那样)发现了很多问题。最大的问题来自于数据库交互的开发没有考虑到并发性。我们有大量的锁等待和一些死锁发生。我们决定修改数据访问层以满足新的要求。

如果不将客户端和服务器中的应用程序分开来处理数据访问和可能的某些业务逻辑,似乎不可能编写 DAL 来允许并发访问。我们不需要非常高性能的解决方案,消息没有那么多,但问题在于数据量。

典型的使用场景如下所示:

  1. 启动应用程序
  2. 从 CSV 文件(通常在 600MB-1GB 之间)导入数据并存储以供将来使用
  3. 添加场景配置(非常少量的数据)并存储它们
  4. 启动优化(获取第 1 步中的数据、应用配置、应用一些优化/限制)
  5. 显示优化结果。

第4步将在服务器上完成,第1-3步和第5步将在客户端上执行。

你们有什么建议吗? 谢谢。

最佳答案

所以真正的问题是如何上传大量数据。 对于这样的解决方案,我不会去 RMI - 它太受限制了。 Apache 河看起来像是某种发明。 Netty 是一个低级网络框架。您将被迫编写自己的协议(protocol)。

我只使用简单的 HTTP 服务器并通过 HTTP POST 请求上传数据。您可以使用 Gzip 压缩。 HTTP 非常适合处理大文件。

在服务器端,任何 servlet 容器都可以(Tomcat、Jetty 等)。

在客户端 Apache HTTP Components应该足够了。您也可以尝试Ning Async HTTP Client .

关于java - 选择java网络框架的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508607/

相关文章:

java - Java 8 中时区类中使用的冰岛的区域 ID 是什么?

sockets - Python 服务器客户端 WinError 10057

java套接字编程: message delivery order

c++ - 检测网络接口(interface)变化

c++ - Qt。如何使用QtNetwork查看网络上的其他电脑?

java - 可以对枚举进行子类化以添加新元素吗?

Java 右键单击​​不进行选择。在全局范围内解决此问题的最简单方法是什么?

java - 将文件写入仍然不存在的目录

java - ElasticSearch 高级 API 使用自定义设置创建索引返回错误

java - Netty 线程模型在客户端连接多的情况下如何工作?