需要在特定端口上运行基于Camel(Mina / Netty)的TCP服务器,允许多个TCP客户端连接到它。要流式传输的内容在文件中可用,TCP服务器必须将文本文件中的每一行发送到其中一个连接的客户端(循环)。
有人可以用骆驼路线的轮廓来帮助我实现这个目标吗?
还可以限制流速,例如每个连接的客户端100 msg /秒?
提前致谢。
MK
答案 0 :(得分:2)
我做过类似的事情。不完全是你想要的,但我可以就如何开始提出一些建议。
让我们将MINA组件用于此路由,因为我遇到Netty组件的一些问题,请参阅此链接Exception thrown from Apache Camel Netty Consumer When more than one client sends data。显然这已经修复,但是当我的项目被取消时,我再也没有测试过它。
所以根据你的描述,这将是一个基于文本行的协议,一个简单的路由就像这样在DSL中
<route>
<from uri="mina2:tcp://localhost:5555?textline=true"/>
<to uri="bean:fileProcessing"/>
</route>
此路由将在端口5555上的localhost上打开侦听套接字。路由也设置为使用文本行编解码器。文本行编解码器本质上是一行文本终止的行尾字符,即\n
。如果您打算使用其他协议,则需要查看以下内容:
您可以在fileProcessing
bean中实现一些逻辑来发回回复。但是有一个问题,当客户准备好换新线时,他们必须要求。根据我的理解,这遵循请求回复场景。但是,根据我所看到的,只有当有消息从客户端进入服务器时,路由才会处于活动状态。
可能有一种方法可以从服务器发起发送,但是你需要自己试验完成它我自己没有做过这样的事情。
批判性阅读将如下。
我的建议是从这样的基本路线开始,然后扩展你的逻辑,然后回过头来看看你可能会遇到的问题。
更新:
所以我对此进行了一些研究,如果不遵循以下模式之一InOnly和InOut,似乎无法将事件从服务器发送到客户端。
然后尝试使用MINA或Netty。