chunked java_java – 如何正确使用ChunkedStream

chunked java_java – 如何正确使用ChunkedStream这是我的用例 我有一个上游服务 通过网络发送我的 Netty 应用程序数据 并且该数据需要发布到连接到 Netty 的多个客户端 推送到客户端的数据必须是 HTTP Transfer Encoding chunked 我找到了 ChunkedStrea 虽然也许我可以创建一个 PipedInputSt 和一个 PipedOutputS 连接到 PipedInputSt 并将 Chunked

这是我的用例…我有一个上游服务,通过网络发送我的Netty应用程序数据,并且该数据需要发布到连接到Netty的多个客户端.推送到客户端的数据必须是HTTP“Transfer-Encoding:chunked”.

我找到了ChunkedStream,虽然也许我可以创建一个PipedInputStream和一个PipedOutputStream(连接到PipedInputStream)并将ChunkedStream写入通道.然后,当从我的上游服务收到数据时,我可以将数据写入通道的PipedOutputStream,然后将其发送给客户端:

在channelConnected中

PipedInputStream in = new PipedInputStream();

PipedOutputStream out = new PipedOutputStream(in);

ctx.getChannel().write( new PersistentChunkedStream(in) );

单独的线程将数据发布到连接的通道

ChannelBuffer buff = ChannelBuffers.copiedBuffer(“FOO”,CharsetUtil.UTF_8);

out.write( buff.array() );

channel.get(ChunkedWriteHandler.class).resumeTransfer();

如果有0个字节可用,我必须扩展ChunkedStream以从nextChunk返回null(在没有线程挂起的情况下“挂起”写入),所以在写入相关通道的PipedOutputStream之后我调用resumeTransfer.当我调试并逐步执行代码时,我可以看到正在调用ChunkedWriteHandler的flush,它会调用:

Channels.write(ctx, writeFuture, chunk, currentEvent.getRemoteAddress());

我写入PipedOutputStream的字节数,但它从未被客户端接收过.

HTTP卷曲

~ $curl -vN http://localhost:8080/stream

* About to connect() to localhost port 8080 (#0)

* Trying 127.0.0.1… connected

* Connected to localhost (127.0.0.1) port 8080 (#0)

> GET /stream HTTP/1.1

> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3

> Host: localhost:8080

> Accept: */*

>

< HTTP/1.1 200 OK

< Transfer-Encoding: chunked

<

NOTE: NO “FOO” TRANSMIT BACK

有什么想法吗?也许有更好的方法来实现这一目标?

解决方法:

我想知道为什么你甚至想要使用PipedInputStream / PipedOutputStream.我认为没有你的数据直接调用Channel.write(..)会更干净/更容易.请注意在Channel.write(..)中提交尽可能多的数据,因为它是一项昂贵的操作.

您可以从任何您想要的线程调用Channel.write(..)作为其线程安全.

标签:java,netty

来源: https://codeday.me/bug/20190723/1513967.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224566.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:39
下一篇 2026年3月17日 上午11:39


相关推荐

  • 关于Glup_gulp使用教程

    关于Glup_gulp使用教程gulp—-项目工程化的工具一,作用:(1)能够完成代码的压缩(2)合并,复制,监听,ES6的代码转换,启动服务器等等二,gulp使用步骤:搭建环境(1)安装nodeJS(2)安装node的目的是为了测试npm(npm是nodeJS的包管理工具全称:nodeJSPackageManager)使用npm的原因:a.如果一个项目中使用的第三方js代码非常多,…

    2025年6月28日
    5
  • Windows Hook原理与实现

    Windows Hook原理与实现WindowsHook 原理与实现教程参考自 逆向工程核心原理 1 概述 Hook 技术被广泛应用于安全的多个领域 比如杀毒软件的主动防御功能 涉及到对一些敏感 API 的监控 就需要对这些 API 进行 Hook 窃取密码的木马病毒 为了接收键盘的输入 需要 Hook 键盘消息 甚至是 Windows 系统及一些应用程序 在打补丁时也需要用到 Hook 技术 接下来 我们就来学习 Hook 技术的原理

    2026年3月18日
    3
  • js阻止冒泡,兼容写法。

    js阻止冒泡,兼容写法。有几次遇到 a 链接里面包含 click 点击方法 这时候会触发 click 事件 还会触发 a 链接跳转 这时候就需要阻止冒泡了 添加 event stopPropagat 就可以了 在 chrome 上可以使用 本以为万事大吉了 没想到火狐不支持 event 事件 既然问题来了 就得解决 所以搜遍了百度 得到了以下的代码 兼容火狐获取 event 方法 functiongetE if

    2026年3月16日
    2
  • 15.「极简」扣子(coze)教程 | 基本组件“选择器”节点一定要讲讲透(一)

    15.「极简」扣子(coze)教程 | 基本组件“选择器”节点一定要讲讲透(一)

    2026年3月12日
    2
  • statement和prepareStatement 的区别

    statement和prepareStatement 的区别????Java基础教程系列:Java基础教程系列????Java学习路线总结:搬砖工逆袭Java架构师????Java经典面试题大全:10万字208道Java经典面试题总结(附答案)????简介:Java领域优质创作者????、CSDN哪吒公众号作者✌、Java架构师奋斗者????????扫描主页左侧二维码,加入群聊,一起学习、一起进步????欢迎点赞????收藏⭐留言????一、【粉丝福利】送书啦,大家期待已久的Vue!本次活动送书规则:【送

    2022年6月12日
    39
  • matlab求导/积分函数

    matlab求导/积分函数matlab 求导函数求 n 阶导函数 symsxy atan x dy diff y x figure 1 ezplot dy d2y diff y x 2 figure 2 ezplot d2y 二阶图像 1 阶图像

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号