如何管理标识您的协议的前缀字节序列

2023-12-24

这与我有关统一设置的问题有关(具有持久通道的端口统一 https://stackoverflow.com/questions/18445861/port-unification-with-persistent-channel)

我正在尝试发送一个两字节序列作为我的协议的所有流量的前缀;我这样做是为了当我更新以支持多个协议时,可以在统一处理程序中嗅探一些东西。

在客户端上,我在管道末端有一个简单的出站处理程序,它在 ByteBuf 前面加上两个协议标识字节,并在服务器管道前面有一个简单的入站处理程序,用于提取它们。我已经设法让它适用于小消息。

服务器队列中的后续处理程序是LengthFieldBasedFrameDecoder我用它来构建传入流量(protobuf 对象)。发生的情况似乎是客户端发送了一个大请求,比如 5M。我得到一系列通过服务器管道的 64k 缓冲区,其中最后一个超过了阈值LengthFieldBasedFrameDecoder正在等待,它提取帧并将其传递以进行处理 - 这是正确发生的。

至此,一切都破裂了。据我所知,来自客户端的最后一个 64k 缓冲区包含帧的其余数据、表示下一个请求开始的 2 字节序列,以及更多内容。我认为这些数据位于帧解码器中,它现在将使用两个协议魔术字节作为下一帧的长度,这是不正确的,并且事情从那里开始崩溃。

The DelimiterBasedFrameDecoder看起来它在这种情况下会起作用,因为两个字节序列将分解每个逻辑帧/请求,但在这种情况下这似乎有点矫枉过正。

在这种情况下是否有其他解码器可以工作,或者我应该坚持使用DelimiterBasedFrameDecoder?


如果您查看文档基于长度字段的帧解码器 http://netty.io/4.0/api/io/netty/handler/codec/LengthFieldBasedFrameDecoder.html有一个很好的例子说明了如何做你想做的事情。第四个示例在长度字段前面有一个固定宽度的标头,它配置 FrameDecoder 不去除任何标头信息。

EDIT

对于您的服务器,LengthFieldBasedFrameDecoder 应该首先出现,然后检查标头的处理程序可以删除标头和长度字段并相应地传递数据。

在客户端,您可以使用长度字段预置器 http://netty.io/4.0/api/io/netty/handler/codec/LengthFieldPrepender.html,然后添加一个额外的处理程序来添加您的标头数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何管理标识您的协议的前缀字节序列 的相关文章

  • 从 netty ByteBuf 获取字符串

    如何从netty中获取字符串ByteBuf 到目前为止 我能够逐个字符地获取它 有没有办法直接获取字符串对象 message is of type ByteBuf for int i 0 i lt message capacity i by
  • Netty closeFuture().sync().channel();块休息 API

    我正在学习 Netty 并开始使用 Spring Boot 一些教程 我的目标是创建一个应用程序 该应用程序设置一个 TCP 端口来接收消息并通过 REST API 呈现它们 大多数教程都说我应该添加这样的东西 serverChannel
  • 如何管理标识您的协议的前缀字节序列

    这与我有关统一设置的问题有关 具有持久通道的端口统一 https stackoverflow com questions 18445861 port unification with persistent channel 我正在尝试发送一个
  • Netty的并发编码

    编码器的encode方法会并发执行吗 我观察到编码方法可能是由不同线程并发的 管道定义为 Channels pipeline idleHandler new AmfDecoder
  • 使用多个线程处理单个连接

    我有 3 个异步服务器和客户端 它们像一条链一样相互连接 一个请求会经过 3 个系统 例如 gt System 1 gt System 2 gt System 3 gt 和回应 gt System 3 gt System 2 gt Syst
  • Netty:关闭通道时出现 ClosedChannelException

    为什么当我尝试关闭通道时 会抛出 ChannelClosedException 使用 Channel close 关闭 异常的堆栈跟踪 java nio channels ClosedChannelException at org jbos
  • Netty的ChannelLocal的使用

    Netty 的 JavaDocs 解释 ChannelLocal 与 ThreadLocal 类似 但是我对它的用法有一些疑问 ThreadLocal 是一个静态类 具有访问特定于实例的对象的静态方法 ChannelLocal 不是静态的
  • 是增加工作线程的数量还是在 Netty 中创建自己的线程池更好?

    假设我们的 Netty 服务器 4 1 32 响应 HTTP 调用 我们进一步假设它必须在回答传入请求之前执行某些阻塞操作 例如 它必须执行传出调用 此处使用不同的库 来加载外部数据 NioEventLoopGroup 长连接线程数 htt
  • JBoss Netty 与 JSON

    我希望我的 Ajax 代码能够通过 Netty 连接服务器 为此 我需要在服务器端 Netty 处理程序中使用 JSON 解码器和编码器 是否有任何开箱即用的实现 或者我应该编写自己的实现 Thanks Gil 据我所知 没有内置的 JSO
  • 每个 UDP 数据报的 Netty 不同管道

    我们有一个已经在 TCP IP 中实现的服务器 但现在我们要求该协议也支持 UDP 发送的每个 UDP 数据报都包含我需要解码的所有内容 因此这是一个非常简单的回复和响应系统 数据报中的数据由换行符分隔 服务器启动时的引导代码如下所示 SE
  • ChannelOption.SO_BACKLOG 的作用是什么?

    option ChannelOption SO BACKLOG 100 Netty 4 升级文档中显示 你能解释一下它的作用吗 Thanks 它是一个传递的套接字选项 用于确定排队的连接数 http docs oracle com java
  • 为什么JDK NIO使用这么多anon_inode文件描述符?

    我正在使用 Sun 的 JDK 1 6 0 26 和 NIO 带有 Netty 在 lsof 中我看到数百个文件描述符anon inode lsof np 11225 fgrep w anon inode java 11225 nobody
  • 客户端 ECC SSL 证书包含“未知命名曲线”

    问题背景 我正在一个现有的库中工作 该库在远程服务器上使用 SSL 和 netty 框架 我遇到 SSL TLS 握手错误 错误如下 javax net ssl SSLProtocolException java io IOExceptio
  • Netty:如何处理从 ChunkedFile 接收到的块

    我是 netty 新手 我正在尝试将分块文件从服务器传输到客户端 发送块工作得很好 问题在于如何处理接收到的块并将它们写入文件 我尝试的两种方法都会给我带来直接缓冲区错误 任何帮助将不胜感激 Thanks Override protecte
  • 与Netty相比,vert.x如何实现卓越的性能?

    最近的TechEmpower 性能基准 http www techempower com benchmarks 一直在 Netty 之上展示 vert x 有时数量很大 根据其网站 vert x 使用 Netty 来实现 大部分网络 IO
  • Netty 处理程序未调用

    我正在尝试使用简单的服务器客户端应用程序进入 Netty 代码见下文 我正在努力解决两个问题 ConfigServerHandler 分别ConfigClientHandler 被正确调用 但是 FeedbackServerHandler
  • Netty 和字节顺序

    由于文档不完善并且缺乏 Netty 经验 我遇到了一些问题 我不知道如何设置默认的 ByteOrder 我需要一个小尾数法默认设置 如果有人能给我一些关于这方面的提示 我会很高兴 你可以使用Bootstrap setOption 去做这个
  • 如何用Java处理来自客户端的Websocket消息?

    我正在使用 Websocket 用 Ja va 开发客户端 服务器应用程序 目前 所有客户端消息均使用 switch case 进行处理 如下所示 OnMessage public String onMessage String unscr
  • 使用 Play WS 并获取 java.net.ConnectException:Amazon Cloudfront 上的握手超时

    在我的 Play 应用程序中 我需要从 Amazon Cloudfront 下载大量文件 使用 SSL 我在链接上随机收到以下错误 play api http HttpErrorHandlerExceptions anon 1 Execut
  • 如何查找以下 netty 错误的根本原因:io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s)

    我经历过从负责将数据发送到 TCP 客户端的管道引发的以下异常 2017 03 02T18 00 53 749 epollEventLoopGroup 3 1 ERROR ExceptionHandler null Unknown exce

随机推荐

  • 如何使用 pyspark 对 RDD 中的值进行分组和计数以返回一个小摘要?

    一些示例数据 new data name Tom subject maths exam score 85 name Tom subject science exam score 55 name Tom subject history exa
  • 似乎无法访问 animate.css

    所以我做了 npm install animate css save 安装成功了 我可以在我的node modules我希望能够在我的 elixir phoenix react 项目中使用 animate css 我只是不确定在哪里导入 需
  • HTML/CSS div 未在页面顶部对齐

    抱歉 这个问题似乎是重复的 但他们都没有解决我的问题 所有边距 边框和内边距设置均设置为 0px 主页面div的margin left和margin right两边都设置为15px 至少我看不到任何地方我忘记将其中之一设置为 0px 由于某
  • EF Core 2.0 OwnsOne 列前缀

    使用 OwnsOne 映射复杂类型时 sql 列名称以属性名称为前缀 是否可以在映射中指定前缀名称 这是我的映射 e OwnsOne x gt x Attributes cb gt cb OwnsOne a gt a Supplier 我希
  • tostring() 被隐式调用...如何?

    在下面的代码中 如何toString 是隐式调用的 class Payload private int weight public Payload int w weight w public void setWeight int w wei
  • h2数据库的jdbc连接字符串是什么?

    我正在尝试连接到本地计算机上的 h2 数据库以创建 sql DataSource 对象 我正在运行 Windows 在定义项目 app properties 文件中的数据文件的路径时遇到一些问题 假设本地目录数据文件的路径是 D proje
  • 格式错误的数组文字 - PostgreSQL

    我想将数组从 jsonb 字段复制到 PostgreSQL 数组列 CREATE TABLE survey results id integer NOT NULL areas text raw jsonb DEFAULT jsonb INS
  • ggplot 图例中的 Unicode 字符

    我正在尝试使用 R 中的 ggplot2 绘制一些图表 并使用 unicode 字符 例如日语 标记图例 以下是我的代码 ggplot mtcars aes x mpg y wt colour geom line But I end up
  • 使用 for 循环附加 onclick 方法

    我将 onclick 事件附加到我动态创建的元素中 我正在使用下面的代码 这只是重要的部分 Test prototype Show function contents for i 0 i lt contents length 1 i var
  • ksoap2 问题 java.net.ConnectException

    我正在使用 kSoap2 访问肥皂网络服务 我正进入 状态java net connectException执行以下行时 androidHttpTransport call Constants SOAP ACTION GET METHOD
  • 无效的“Podfile”文件:未定义的方法“存在?”对于文件:类

    在 Xcode 项目中安装 pod 时 我遇到如下 Podfile 问题 Invalid Podfile文件 未定义的方法 存在吗 对于文件 类 我确实尝试过更新 pod 版本brew upgrade cocoapods并点击以下链接 ht
  • CSS calc() 的边框宽度?

    我可以将 calc 与 border width 一起使用吗 我希望以下 CSS 能够工作 my element border left width calc 10 10px border right width calc 10 20px
  • 浮点型或双精度型特殊值

    我有可能为 空 的双精度 或浮点 变量 如不持有有效值 如何使用内置类型 float 和 double 来表示这种情况 一种选择是具有浮点数和布尔值的包装器 但这是行不通的 因为我的库具有存储双精度数的容器 而不是存储双精度数的对象 另一种
  • cout 的 << 运算符在运算符优先级方面如何工作? [复制]

    这个问题在这里已经有答案了 可能的重复 意外的求值顺序 编译器错误 https stackoverflow com questions 5214611 unexpected order of evaluation compiler bug
  • JQuery - 切换类/添加类/删除类

    我有以下代码来创建顶部滑动管理面板 该面板将从页面的最顶部显示 单击按钮 tp button2 即可激活该滑动面板 不过 我想再添加一个滑动面板并将其命名为 toppanel2 Behavior tp button2 单击时 它将显示或隐藏
  • 在 Instagram 中发送网站链接到私信时没有出现图像预览

    当我在私信中发送网站链接时 预览图像没有出现 仅出现标题和说明 也许我需要在我的 html 页面中添加一些元标记 但当我分享 Facebook 或 Twitter 的链接时 它们表现得很好 None
  • 如何在 Python 2 和 3 中编写八进制值

    我需要以 Python 2 和 3 兼容的方式编写 0644 0o644 怎么做 我唯一的想法是从字符串中解析它或转换为十六进制或十进制 这不是人类可读的 我不介意速度慢 它只被调用一次 非常旧的 python 2 版本 lt 2 6 ht
  • 核心数据连接表,具有许多通过、获取的属性谓词

    How do you write a Fetched Property for the Place Entity that will present an Array of Users 对于获取的属性users of Place检索其签到与
  • python 通过返回嵌入的可迭代对象使类可迭代

    我在 python 中有一个类 它有一个可迭代的实例变量 我想通过迭代嵌入的可迭代对象来迭代该类的实例 我的实现如下 def iter self return self iterable iter 我实在不太舒服打电话给 iter 可迭代的
  • 如何管理标识您的协议的前缀字节序列

    这与我有关统一设置的问题有关 具有持久通道的端口统一 https stackoverflow com questions 18445861 port unification with persistent channel 我正在尝试发送一个