Java网络数据交换架构

时间:2012-03-24 07:41:21

标签: java networking

我正在重新设计我的旧应用程序。我不确定将数据从客户端传输到服务器以及在不同服务器之间传输的形式。以前只有一台服务器正在处理客户端。数据交换是通过序列化和自定义的“IO-Solution”完成的(之前我没有使用像netty这样的框架。我打算现在使用netty。)

我现在的问题是我应该使用序列化吗?我有各种类型的服务器(登录,“集群管理器”(跟踪其他服务器状态等,并为其分配任务),处理客户端和提供对集群的访问的服务器,我可能称之为“对象或实例服务器”那些最后的服务器运行特定场景,如“战斗”或特定世界/地图的一部分。

序列化的替代方法是使用基于自定义字节的协议并从缓冲区中逐步解析...

如果您需要更多信息以获得良好的回答,请询问。

3 个答案:

答案 0 :(得分:4)

最佳解决方案取决于您的方案的细节和未来的计划。如果:

  1. 您的各种服务器和客户端都是用Java编写的
  2. 你控制他们的发展
  3. 您可以控制其部署,以便版本可以保持同步
  4. 网络通信不是性能关键
  5. 因素1-4在可预见的未来将保持这种状态
  6. 然后Java序列化是最好的解决方案,我会毫不犹豫地使用它。

    • 如果因素1存在疑问,您肯定需要标准化的跨平台解决方案,如JSON,XML,Protocol BuffersApache ThriftASN.1

    • 如果因素2存在疑问,您需要一个流行的标准化跨平台解决方案,这会使该字段缩小一点,并在顶部使用XML和JSON。

      < / LI>
    • 如果因素3存在疑问,您需要一种可以受控方式扩展和版本化的协议。 Java序列化可以在某种程度上做到这一点,但我怀疑它是最好的解决方案。我没有太多的经验;你必须看到最好的解决方案。

    • 如果因素4存在疑问,基于自定义字节的协议可能是最佳解决方案,但我也会研究/运行其他选项的一些测试,以了解它们的表现。

答案 1 :(得分:2)

看看Kryo。它的序列化速度要快得多。您也可以尝试使用Google协议缓冲区。

答案 2 :(得分:1)

不同序列化库的基准: https://github.com/eishay/jvm-serializers/wiki/