Tyrus 客户端无法设置传入缓冲区大小

2024-01-04

我尝试通过 WebSocket 传输大于 4M 的文件。我在用着org.glassfish.tyrus:tyrus-server:1.13.1 and org.glassfish.tyrus:tyrus-container-grizzly-server:1.13.1作为依赖项。

默认情况下传入缓冲区大小约为 4M(请参阅:8.4.传入缓冲区大小 https://tyrus-project.github.io/documentation/1.12/user-guide.html#d0e1197)。该文档清楚地说明了如果我想增加文件的大小但仍然无法更改传入缓冲区的大小,需要做什么。这是我想做的事情的本质:

CountDownLatch messageLatch = new CountDownLatch(1);

final ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build();
ClientManager client = ClientManager.createClient();

client.getProperties().put(ClientProperties.INCOMING_BUFFER_SIZE, new Integer(17_000_000));
Integer tyrusIncomingBufferSize = Utils.getProperty(client.getProperties(), ClientProperties.INCOMING_BUFFER_SIZE, Integer.class);
System.out.println("tyrusIncomingBufferSize: " + tyrusIncomingBufferSize); // 17000000

client.connectToServer(new Endpoint() {
    @Override
    public void onOpen(Session session, EndpointConfig config) {
        try {
            session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {

                @Override
                public void onMessage(ByteBuffer message) {
                    System.out.println("Received message: " + message);
                    messageLatch.countDown();
                }
            });

            File pic = new File(TEST_PIC); // the size is more than 4M
            FileInputStream fileReader = new FileInputStream(pic);
            final long sizeOfScreenshotFile = pic.length();
            System.out.println(sizeOfScreenshotFile); // 4734639
            byte[] screenshotData = new byte[(int) sizeOfScreenshotFile];
            fileReader.read(screenshotData);
            fileReader.close();

            ByteBuffer bb = ByteBuffer.wrap(screenshotData);
            session.getBasicRemote().sendBinary(bb);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}, cec, new URI(URI));
messageLatch.await(100, TimeUnit.SECONDS);

但我仍然有同样的错误:

17000000
4734639
V 30, 2017 1:39:58 PM org.glassfish.tyrus.core.TyrusEndpointWrapper onError
WARNING: Unexpected error, closing connection.
java.lang.IllegalArgumentException: Buffer overflow.
    at org.glassfish.tyrus.core.Utils.appendBuffers(Utils.java:346)
    at org.glassfish.tyrus.core.TyrusWebSocketEngine$TyrusReadHandler.handle(TyrusWebSocketEngine.java:523)
    at org.glassfish.tyrus.container.grizzly.server.GrizzlyServerFilter$ProcessTask.execute(GrizzlyServerFilter.java:379)
    at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:114)
    at org.glassfish.tyrus.container.grizzly.client.TaskProcessor.processTask(TaskProcessor.java:91)
    at org.glassfish.tyrus.container.grizzly.server.GrizzlyServerFilter.handleRead(GrizzlyServerFilter.java:215)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

java.io.IOException: An established connection was aborted by the software in your host machine
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
    at sun.nio.ch.IOUtil.write(IOUtil.java:51)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
    at org.glassfish.grizzly.nio.transport.TCPNIOUtils.flushByteBuffer(TCPNIOUtils.java:149)
    at org.glassfish.grizzly.nio.transport.TCPNIOUtils.writeSimpleBuffer(TCPNIOUtils.java:133)
    at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:126)
    at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:106)
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.processAsync(AbstractNIOAsyncQueueWriter.java:344)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:108)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.executeIoEvent(WorkerThreadIOStrategy.java:103)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.executeIoEvent(AbstractIOStrategy.java:89)
    at org.glassfish.grizzly.nio.SelectorRunner.iterateKeyEvents(SelectorRunner.java:415)
    at org.glassfish.grizzly.nio.SelectorRunner.iterateKeys(SelectorRunner.java:384)
    at org.glassfish.grizzly.nio.SelectorRunner.doSelect(SelectorRunner.java:348)
    at org.glassfish.grizzly.nio.SelectorRunner.run(SelectorRunner.java:279)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
-9.8634088E7
V 30, 2017 1:41:38 PM org.glassfish.grizzly.http.server.NetworkListener shutdownNow
INFO: Stopped listener bound to [0.0.0.0:8025]
V 30, 2017 1:41:38 PM org.glassfish.tyrus.server.Server stop
INFO: Websocket Server stopped.

我尝试调试 Tyrus 项目,发现incomingBufferSize变量实际上保留了默认值。

有谁知道我该如何解决这个问题?


您正在客户端中设置属性,但在服务器上显然抛出了异常。

你如何启动服务器?看起来您似乎正在独立使用 Grizzly - 如果您这样做,您可以尝试使用以下命令启动服务器TyrusWebSocketEngine#INCOMING_BUFFER_SIZE https://tyrus-project.github.io/apidocs/1.13.1/org/glassfish/tyrus/core/TyrusWebSocketEngine.html#INCOMING_BUFFER_SIZE属性设置为17_000_000或任何你想要的值。

(这可以通过使用创建服务器来完成服务器(地图、类...) https://tyrus-project.github.io/apidocs/1.13.1/org/glassfish/tyrus/server/Server.html#Server(java.util.Map,%20java.lang.Class...)或其他构造函数。看服务器类 javadoc https://tyrus-project.github.io/apidocs/1.13.1/org/glassfish/tyrus/server/Server.html更多细节。

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

Tyrus 客户端无法设置传入缓冲区大小 的相关文章

随机推荐

  • 如何确定 connectNative 是失败还是成功

    我已成功将我的扩展连接到我们的本机主机 var pulse tracker port chrome runtime connectNative com cloudfactory pulsetracker 但我如何知道连接是否成功呢 无论连接
  • Xcode 5“缺少编译器规范 LLVM 4.2”错误

    我目前正在尝试在 Xcode 5 中构建我的项目 构建失败并出现错误 依赖性分析错误 missing compiler specification
  • 抽象工厂设计模式

    我正在为我的公司开发一个内部项目 该项目的一部分是能够将 XML 文件中的各种 任务 解析为稍后运行的任务集合 由于每种类型的任务都有许多不同的关联字段 因此我决定最好用单独的类来表示每种类型的任务 为此 我构造了一个抽象基类 public
  • 输入上的 v-model 通过其他脚本动态更改值?

    我有两个输入 用于存储来自谷歌地图脚本的纬度和经度 如果用户更改标记的位置 gt 这两个输入将获取用户所啄的纬度和经度 所以我想获取这两个输入的值 我尝试了 v model 但它不起作用我实际上注意到 只有当我通过键入或粘贴某些内容来更改这
  • CMD.EXE 批处理脚本显示 txt 文件中的最后 10 行

    有什么想法如何回显或输入 txt 文件的最后 10 行吗 我正在运行服务器更改日志脚本来提示管理员说明他们正在做什么 以便我们可以跟踪更改 我试图让脚本显示最近 10 个条目左右 以了解最近发生的情况 我找到了一个处理最后一行的脚本 如下所
  • Android 从gridview布局索引转换成行和列

    如果我有从 0 开始的网格上位置的索引 如何将其转换为行 列 我得到以下错误结果 幸运的是 我知道我有多少行和列 在我的例子中是 11 x 11 int column position columns int row position co
  • 每个服务端点的 HttpClient 实例化

    实例化 HttpClient 时 一个常见的建议是 使用单例 每次使用后不要丢弃 https stackoverflow com questions 22560971 what is the overhead of creating a n
  • 将 Angular-Seed Jasmine 单元测试转换为 CoffeeScript

    作为练习 我正在尝试转换包含在angular seed从 js 回购到咖啡脚本 特别是 我遇到了问题tests unit directivesSpec js测试集 定义了一个简单的价值服务 这是我的咖啡脚本代码 1 describe dir
  • 如何检测 Gradle 构建是否正在 TeamCity 上运行?

    一些日志消息 https www jetbrains com help teamcity service messages html我的构建脚本中的内容仅当 Gradle 构建在 TeamCity 上运行时才相关 如何以编程方式检测 Gra
  • OLE DB 提供程序“Search.Collat​​orDSO”返回“命令未准备好”

    有人能够使用 OLE DB 提供程序在 SQL Server 中进行搜索来连接到 Windows 搜索服务吗 下面您将看到我在 Management Studio 中配置链接服务器时不断遇到的错误消息 链接服务器 TESTSERVER 的
  • 无序列表

    就 SEO 和可访问性而言 ul 这是构建简单导航菜单的好方法吗 作为参考 我尝试通过 Lynx 测试我的所有网站 只是为了帮助确保可访问性 并且 ul 就 Lynx 中的显示而言 s 似乎是最充分的 但这真的可以用作 SEO 的良好经验法
  • C++ ABI 如何处理 RVO 和 NRVO?

    我对编译器和链接器如何处理调用要求这一事实感到困惑er该功能的不同取决于该功能是否使用 RVO 还是 NRVO 这可能是我的误解 但我的假设是通常没有 RVO 或 NRVO std string s get string 如果 get st
  • 快速错误“Domain=NSCocoaErrorDomain Code=3840“字符 1 周围的值无效。”

    我在修复 Swift Alamofire POST 请求 登录用户 上的此错误消息时遇到问题 3840 字符 1 周围的值无效 我导入了粉底 阿拉莫菲尔 斯威夫特 杰森 没有授权限制 没有 Oauth 等 当我更改帖子 例如 使用其他参数和
  • 选择每隔一个可见的表格行

    我有一个显示树结构的表格 超级类别和子类别 当用户单击超类别时 子类别的显示属性将被切换 现在我想在每两个表格行上添加交替背景颜色 但当然只考虑当前可见的那些 下面是结构的简化示例 table tr td Super 1 td tr tr
  • jquery如何检查url是否包含word?

    我希望能够检查 url 是否包含 目录 一词 这就是我正在尝试的 document ready function if window location href indexOf catalogue trail toggle 该网站的网址可能
  • ViewChild 和 focus()

    我有一个包含默认隐藏文本区域的组件 div class action ui g 2 edit div
  • 发现内存泄漏问题 cStringUsingEncoding

    嘿 我正在尝试使用 cStringUsingEncoding 将 NSString 转换为 C 字符串 但出现内存泄漏 我的理解是 cStringUsingEncoding 返回一个指向字符数组的指针 该数组仅保证在 NSString 对象
  • 如何使用 Spotlight 传递参数来运行 shell 脚本?

    有人提到我们可以使用聚光灯执行 shell 脚本 将其重命名为 myscript command 如下所述here https stackoverflow com questions 2877741 how to run a shell s
  • Coverity 为使用“cov-build”的构建定义了哪些预处理器符号?

    我们使用 Coverity 的扫描构建 http scan coverity com 为免费和开源项目提供服务 我正在研究 Coverity 关于受污染参数的两项调查结果 TAINTED SCALAR 污点是误报 因此我尝试使用 Cover
  • Tyrus 客户端无法设置传入缓冲区大小

    我尝试通过 WebSocket 传输大于 4M 的文件 我在用着org glassfish tyrus tyrus server 1 13 1 and org glassfish tyrus tyrus container grizzly