3

需要有一个基于 Camel (Mina/Netty) 的 TCP 服务器在特定端口上运行,它允许多个 TCP 客户端连接到它。要流式传输的内容在文件中可用,并且 TCP 服务器必须将文本文件中的每一行发送到连接的客户端之一(循环)。

有人可以帮我勾勒出骆驼路线的轮廓来实现这一目标吗?

还可以限制流传输速度,例如每个连接的客户端 100 msg/sec?

提前致谢。

MK

4

1 回答 1

3

我做过这样的事情。嗯,不完全是你想要的,但我可以就如何开始提出一些建议。

让我们为这条路线使用 MINA 组件,因为我对 Netty 组件有一些问题,请参阅此链接Exception throw from Apache Camel Netty Consumer When more than one client send data。显然,这已得到修复,但随着我的项目被取消,我再也没有测试过它。

所以根据你的描述,这将是一个基于文本行的协议,一个简单的路由在 DSL 中看起来像这样

<route>
   <from uri="mina2:tcp://localhost:5555?textline=true"/>
   <to uri="bean:fileProcessing"/>
</route>

此路由将在 localhost 端口 5555 上打开一个侦听套接字。该路由还设置为使用 textline 编解码器。文本行编解码器本质上是一行以行尾字符结尾的文本,即\n. 如果您要使用其他协议,则需要查看以下项目:

  • ProtocolEncoder——ProtocolEncoder 处理获取输入负载并将字节放入 TCP 通道的任务。
  • ProtocolDecoder——ProtocolDecoder 将自定义二进制协议消息解释为您的应用程序可以理解的内容。
  • ProtocolCodecFactory——这将创建编码器和解码器。

您可以在 bean 中实现一些逻辑fileProcessing来发送回复。有一个问题,但是当客户准备好获得新线路时,他们必须提出要求。据我了解,这遵循请求回复场景。但是,据我所见,该路由仅在有消息从客户端传入服务器时才处于活动状态。

可能有一种方法可以从服务器启动发送,但是您需要自己尝试一下才能完成它我自己没有做过类似的事情。

批判性阅读如下。

我的建议是从这样的基本路线开始,然后扩展您的逻辑,然后返回您可能遇到的问题。

更新:

因此,我对此进行了一些研究,如果不遵循以下 InOnly 和 InOut 模式之一,似乎不可能将事件从服务器发送到客户端。

然后尝试使用 MINA 或 Netty。

于 2013-08-13T06:18:55.830 回答