2013-08-12 62 views
2

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

有人可以帮助我完成骆驼路线的轮廓吗?

此外,也可以进行节流每连接的客​​户端实例100 MSG /秒的流速度?

在此先感谢。

MK

回答

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的路由也设置为使用文本行编解码器。文本行编解码器本质上是一行文字终止的行尾字符,即\n。如果你打算使用一些其他的协议,你需要考虑以下项目:

  • ProtocolEncoder-的ProtocolEncoder处理的同时输入 有效载荷,并把字节到TCP通道的任务。
  • ProtocolDecoder-的ProtocolDecoder解释定制 二进制协议消息的东西你的应用程序可以理解的。
  • ProtocolCodecFactory-这创建编码器和解码器。

您可以在fileProcessing bean中实现一些逻辑以发回回复。但是,当客户准备好换新线时,客户需要申请。根据我的理解,这是一个请求回复场景。但是从我所看到的情况来看,只有当有消息从客户端进入服务器时才会激活路由。

可能有发起从服务器发送的方式,但你需要与自己得到它做我没有做过类似的事情自己做实验。

关键阅读内容如下。

我的建议是开始这样的基本路线,然后扩大你的逻辑,然后你可能遇到的问题回来。

UPDATE:

所以我做了这个一个小小的研究,它似乎没有能够从服务器向客户端发送事件不遵循下列模式INONLY和INOUT之一。

然后尝试使用MINA或Netty。