当前位置: 首页 > 知识库问答 >
问题:

Netty WebSocket-正确驱动“ChannelFuture”的“操作完成”

漆雕育
2023-03-14

我正在编写一个应用程序,通过WebSocket从Netty服务器向客户端发送小文件(~2kb)。

为了测试文件是否发送成功,我进行了以下测试。

  1. 客户端连接到服务器
  2. 设置为从客户端计算机上的服务器上丢弃所有数据
  3. 服务器向客户端发送一个文件
  4. 正在服务器上检查“ChannelFuture”的结果

当我在这个测试中发送一个2kb的文件时,我立即从“future.isSuccess()”和“future.isDone()”得到了真实的结果,即使客户端无法接收该文件。

我对较大的文件重复了这个测试。我发现,如果文件大小大于7kb,“频道未来”将等待传输的反馈。这是我期待的结果。

我正在使用Netty3.6.1,我的应用程序是基于“网站”构建的。

以下是我的部分代码:

ChannelBuffer cb = ChannelBuffers.copiedBuffer(myfile_byteArray);   
ChannelFuture result = ctx.getChannel().write( new BinaryWebSocketFrame( cb ) );
result.addListener(new ChannelFutureListener() {
            public void operationComplete(ChannelFuture future) throws Exception {
                if (future.isSuccess()){  
                    System.err.println("future.isSuccess()");  
                }  
                if (future.isDone()){  
                    System.err.println("future.isDone()");  
                }  
                if (future.isCancelled()){  
                    System.err.println("future.isCancelled()");  
                }  
            }
        });

有人知道我如何让“ChannelFuture”正确处理小文件大小的文件吗?

提前非常感谢!

共有1个答案

东郭展
2023-03-14

仅当数据可以写出到远程对等体时,才会通知通道未来。因此,如果收到通知,则另一个对等方可以毫无问题地接收数据。这适用于所有大小的数据。

 类似资料:
  • 短版 Spotify Android应用程序在最近的一个版本中引入了一个“设备广播状态”开关,我想在我的应用程序中接收那些广播。有哪些广播可用,我应该如何配置我的广播接收器? 我从Spotify应用程序本身中使用了设备广播状态开关,我很高兴该开关取消/激活了这些广播事件。 我现在遇到的问题是,这些信息似乎只是零星地发送。我接收playstatechanged事件(播放、暂停、下一个、上一个),但它

  • 我尝试使用两个matInput字段,每个字段都绑定到单独的mat-autocomplete面板。按照这里的步骤,我可以让一个工作正常,但我有困难与两个输入字段和自动完成面板。 有人看到这个或者知道我做错了什么吗?

  • 我正在使用runAsync()运行几百个函数。所有函数都修改一些静态可用的列表,因此不需要返回任何内容。我想在继续我的处理之前确保它们都完成。这样等待合适吗?有没有更简单的方法来完成我想做的事情?

  • supervisord -c /redis/conf/redis-supervisord.conf 会自动拉起本机的redis和sentinel

  • 我读过《网络指南》,它在ChannelFuture上解释得不多。我发现ChannelFuture在应用时是一个复杂的想法。 我试图做的是在初始响应之后将消息写入上下文。与典型的请求/响应流不同。我需要这样的流程: 客户端发送请求 - 问题是,如果我这样做,第二次写入将不会发出: 然后我尝试使用频道未来,它的工作原理,但我不确定我在逻辑上是否正确: 或者我应该使用ChannelFutureListe

  • 问题内容: 我看到几乎每个人都在这里使用该语句,我们创建了一个类型为as 的类的实例。如果我直接创建了FirefoxDriver的实例,那又 经过很多讨论,据说Webdriver是一个接口,该怎么办?我知道什么是接口以及它如何工作。当我知道Firefox是我要在硒脚本中使用的唯一浏览器时,我想知道是否 正确? 问题答案: 正如您在问题中提到的那样,您 知道 Firefox 是您将在Selenium