我使用的是Netty 4.0.33-Final中的LengthFieldBasedFrameDecoder类。
我正在开发的软件可以在没有Netty的帮助下与电视通信,所以我在这里以非传统的方式使用Netty。我只是使用Netty作为解码器和通道管道来解码来自各种不同设备的消息。那至少是我的目标。
+-------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+--------+-------------------------------------------------+----------------+
|00000000| 38 30 31 72 6c 30 30 31 0d |801rl001. |
+--------+-------------------------------------------------+----------------+
问题是LengthFieldBasedFrameDecoder将长度字段解释为十六进制值0x38,并使用十进制值56作为长度,而不是预期的8。当然,这是合乎逻辑的,因为十六进制数0x38的十进制值是56。我认为记录器显示十六进制值0x38的原因是因为ASCII表显示ASCII字符8的十六进制值为0x38。
所以问题是,来自TV的消息没有得到处理,因为解码器正在等待更多的字节来完成它认为完整消息所需的56字节。
作为一个黑客,我编写了这段代码来将消息的第一个字节转换为LengthBasedFrameDecoder可以正确处理的值。
/**
* This is where I recieve the raw bytes from the TV
*/
public void receive(byte[] data, int length) {
// rip the first byte off and make it an int
int messageLength = Integer.parseInt(new String(data).substring(0, 1));
// convert the int to a byte
byte[] firstByte = { (byte) messageLength };
// replace the original first byte with my newly created one
data[0] = firstByte[0];
// create the ByteBuf so that I can write it to my awaiting pipeline
ByteBuf byteBuf = Unpooled.copiedBuffer(data, 0, length);
channel.writeAndFlush(byteBuf);
}
我是Netty的新手,所以我希望在处理Netty内置的这个场景时,我缺少一些东西。你们能帮我找到处理这件事的正确方法吗?
您可以重写LengthFieldBasedFrameDecoder getUnadiustedFrameLength()
的实现
public class CustomLengthFieldBasedFrameDecoder extends LengthFieldBasedFrameDecoder {
@Override
protected long getUnadjustedFrameLength(ByteBuf buf, int offset, int length, ByteOrder order) {
buf = buf.order(order);
byte[] lengthBytes = new Byte[length];
buf.getBytes(offset, lengthBytes);
String s = new String(lengthBytes, CharsetUtil.US_ASCII);
return Long.parseLong(s);
}
}
我有一个部署过程,在这个过程中,我将代码签入git存储库,并通过web钩子在生产服务器上运行部署脚本。在该服务器上,我使用ssh和.pem键连接到git,从git拉出,npm安装,构建webpack并重新启动服务进程。 我从来不打算从prod服务器提交任何东西--它们应该能够自动部署。但是,这不起作用,因为文件在运行时经常更新,因此下次部署时,步骤失败,表示我与现有的文件冲突,因为它有未提交的更改
我有一个使用Netty 3.6.6的应用程序。我使用Netty将随机数据包从客户端发送到服务器。 发送方使用此管道: 我用ChannelBuffer包装我的数据包数据,我希望处理程序添加4字节长度,以便接收者可以知道数据包的开始和结束位置。 接收器使用: 一切似乎都按预期工作。发送方一个接一个地发送随机大小的信道缓冲区,接收方以相同的顺序接收相同的信道缓冲器 现在我的问题是: 1.When我向通道
问题内容: 我有一个要连接到MySQL数据库的应用程序。它在半夜断开连接,然后喷出有关连接的信息,并且JDBC在X秒内没有收到消息。 在进行任何需要与SQL Server通信的操作之前,我先打电话给我。 这是我的方法: 在该方法中,我将密码等信息放入字符串中,然后以标准JDBC方式创建连接。 然后我调用此方法: 我可以对这两种方法进行哪些更改以适应丢失的连接? 问题答案: 这不是检索连接的正确方法
问题内容: 我正在学习MySQL并尝试使用子句。当我如下使用它时: 我收到以下错误: MySQL服务器正在使用–secure-file-priv选项运行,因此它无法执行此语句 我该如何解决这个错误? 我已经检查了关于同一错误消息的另一个问题,但仍然找不到解决方案。 我正在使用MySQL 5.6 问题答案: 它按预期工作。您的MySQL服务器已使用--secure-file- priv 选项启动,该
问题内容: 我有一种算法,当前会分配很大的双精度数组,它会经常更新和搜索。数组的大小为N ^ 2/2,其中N是算法在其上进行操作的行数。为了与算法周围的应用程序相关联,我还必须保留整个内容的副本。 当然,这对我的算法可以处理的行数施加了限制,因为我要应对堆的限制。到现在为止,我还没有要求使用该算法的人员更新- Xmx设置以分配更多的空间,并且效果很好。但是,我现在遇到了一个真正的问题,我需要此数组
你和我都想去听音乐会,但只剩下一张票了。我们都试图同时预订那张票。使用AWS SDK for PHP的PHP脚本运行以下updateItem API调用,该调用试图将“票据”的“状态”从0(可用)更改为1(保持)。 对于这个用例,这是正确的方法吗? 有人看过DynamoDB文档吗? 如果这是一个正确的实现,对测试方案有什么建议吗?