使用in-vm Channel vs short-circuit来进行本地java对象 - 对象调用有什么好处?

时间:2012-10-25 16:03:02

标签: netty

背景: 我正在为联合/分布式解决方案进行原型设计,该解决方案将使用Netty作为通信基础设施。

我知道我将不得不围绕Netty创建一些功能来实现我们所需要的功能,但我想了解Netty提供的功能,因此我不会重新发明轮子。

目标: 我需要提供一个通用的通信调度层,它将根据与之通信的目标端点自动选择适当的通信通道。

如果目标是本地的,我们希望在-vm中进行通信。如果它是远程的,我们计划在websockets上使用我们自己的二进制格式。我们会知道它是本地的还是远程的,所以这是创建/选择正确频道的问题。

我希望每个服务器实例都有某种频道缓存/地图。这将包括:

  • 1(in-vm)频道
  • 0+(websocket)频道:每个服务器 - 服务器频道1个

问题: 鉴于我们的目标,对于本地(in-vm)通信,我们应该:

  • 使用LocalChannel?
  • 使用EmbeddedChannel? - 不确定这是为了什么
  • 短路电话并直接通信而不使用官方频道?

使用LocalChannel与短路本地呼叫有很大的性能差异吗?如果我们可以在本地情况下消除编码/解码,那将是首选。

谢谢!

1 个答案:

答案 0 :(得分:3)

我在以下multi player game server中使用了Jetlang和Netty进行in-vm消息传递。您可能需要查看UDP part of the code以查看我如何进行会话查找等。这似乎与您的用例类似。
EmbeddedChannel用于测试目的。请查看jetserver的测试用例,看看它的使用示例。它不适合主流使用。
不确定如何不使用频道,所以我无法回答这个问题。