实现Netty传输很长的xml字符串的方法

条件:
1. 例如xml有10000个字符
2. 使用StringDecoder和StringEncoder

当传递这个xml字符串时,由于太长,会被当作多条消息来处理,即一次性得不到整个xml的内容。

解决方法一:
1. 自己实现通讯协议,在消息头加上消息的长度。
    缺点,使用如telnet测试的时候,由于没法在输入的字符串里加入消息长度而得到不服务器的反馈,
    再如用HTTP等直接访问得到的消息是:消息长度头+消息内容,也没法直接使用。
    只能在自己的程序之间使用这种协议, 不能提供给第三方直接访问,例如在浏览器里使用AJAX返回xml。

2. 有没有更好的办法(或者netty已经提供,但是我没找到),即不需要如1那样自定义消息的格式,
    而又能传递大的字符串,像浏览器那样使用AJAX向服务器请求一个大的xml字符串,我们得到的是一个完整的xml,而没有产生分包粘包的现象。

解决方法二:

有个折中的办法,先对xml的内容使用base64编码,然后使用pipeline.addLast("frameDecoder", new DelimiterBasedFrameDecoder(1024, Delimiters.lineDelimiter()));
这样也可以解决长字符串的问题,但是更多的网络流量,Telnet等也可以进行测试。

转载于:https://www.cnblogs.com/ahwankong/archive/2013/05/25/3099141.html

在 Java 中使用 Netty 实现 Json 字符串传输可以通过以下步骤完成: 1. 创建一个 Netty 服务器和客户端: - 在服务器端,创建一个 ServerBootstrap 实例,并设置相关的参数,如端口号、线程模型等。 - 在客户端,创建一个 Bootstrap 实例,并设置相关的参数,如服务器地址、端口号等。 2. 定义数据的传输格式: - 创建一个 POJO(Plain Old Java Object)类,用于表示要传输的数据。 - 使用 JSON 库(如 Jackson、Gson 等)将数据转换为 Json 字符串。 3. 添加编码解码器: - 在服务器端和客户端的 ChannelPipeline 中添加编码器和解码器。 - 编码器将 POJO 类对象转换为 ByteBuf。 - 解码器将 ByteBuf 转换为 POJO 类对象。 4. 处理数据的读写: - 在服务器端,实现 ChannelInboundHandlerAdapter,并重写 channelRead 方法来处理接收到的数据。 - 在客户端,实现 SimpleChannelInboundHandler,并重写 channelRead0 方法来处理接收到的数据。 5. 启动服务器和客户端: - 在服务器端,调用 ServerBootstrap 的 bind 方法来启动服务器。 - 在客户端,调用 Bootstrap 的 connect 方法来连接服务器。 当客户端发送 Json 字符串给服务器时,服务器会接收到该字符串并进行处理。同样地,服务器也可以向客户端发送 Json 字符串。 这只是一个简单的示例,具体实现还需根据实际需求进行适当的调整。同时,为了保证通信的安全性,可以考虑加密和身份验证等其他措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值