用于协议的Netty帧解码器,每个请求有可变线路?

时间:2012-05-28 21:43:09

标签: netty

我是Netty的新手,我正在尝试构建一个简单的SMTP服务器。我遇到的问题是,大多数SMTP服务器命令都由一行,可以在messageReceived()方法中轻松读取。但是,在从客户端接收到多个一行命令后,电子邮件的“数据”部分可以包含任意数量的行。这适用于短电子邮件,但较长的电子邮件只能产生部分数据。我的理解是,这是因为我现在没有任何帧解码器。

我遇到的问题是单行命令用换行分隔,但“数据”部分由任何以“。”结尾的数字行组成。在它自己的路线上。

是否可以创建一个帧解码器,既适用于单行命令,也适用于以特殊字符序列终止的多行请求?

谢谢!

达斯汀

2 个答案:

答案 0 :(得分:1)

Apache James使用Netty for SMTP,因此您可能想看看他们是如何做到的:http://svn.apache.org/viewvc/james/server/trunk/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/

答案 1 :(得分:1)

您不一定需要一个解码器来完成这两项工作。您可以创建两个解码器,一个用于标头,另一个用于数据部分。完成标题部分后,获取对管道的引用,删除“标题解码器”并添加“数据解码器”。完成后,将管道重置为原始配置并继续。