首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用java jersey客户端时HTTP流异常丢弃

使用java jersey客户端时HTTP流异常丢弃
EN

Stack Overflow用户
提问于 2018-08-24 15:14:16
回答 1查看 447关注 0票数 11

对于我们的一个项目,我们通过使用java jersey客户端来使用HTTP提要流

客户端Feed的使用是正常的,但在10分钟后,流会异常丢失;即使流生成器正在运行并生成流

这就是我尝试过的;

代码语言:javascript
复制
import java.util.Date;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.client.Invocation.Builder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.client.ChunkedInput;

public class StreamClient {
    
    private static final String BOUNDARY = "\n";

    public void makeCall() {
        System.out.println("Start Time"+ new Date()) ;
        Client client = ClientBuilder.newClient();
        BasicAuth auth = new BasicAuth();
        auth.setPassword("username");
        auth.setUserName("password");
        BasicAuthentication basicAuthentication = new BasicAuthentication(auth);
        client.register(basicAuthentication);
        WebTarget target = client.target("https://localhost:7211/stream/v1/");
        Builder request = target.request(MediaType.APPLICATION_JSON);
        Response response = request.get();
        
        final ChunkedInput<String> chunkedInput = response.readEntity(new GenericType<ChunkedInput<String>>() {
        });
        
        chunkedInput.setParser(ChunkedInput.createParser(BOUNDARY));
        String chunk;
        do {
            if((chunk = chunkedInput.read()) != null) 
                System.out.println(chunk);  
        }while (!chunkedInput.isClosed());
        System.out.println("End Time " + new Date());
    }
    
    public static void main(String[] args) {
        StreamClient client = new StreamClient();
        client.makeCall();
    }


}

如果流没有丢弃;线程必须在while循环中;一旦流关闭,线程就会出来并打印sysout语句

这里的问题是:为什么chunkedinput是关闭的。

在这里,对于服务器端的每个有效负载/块分离,它是\r\n,并且为了使它从服务器激活连接,发送\n (在客户端,我必须忽略这一点)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-02 21:24:56

我建议使用wireshark来准确地分析连接断开时的流量,因为防火墙很可能会切断连接。

在任何情况下,尝试在没有双边日志记录的情况下调试这些场景都是50%的俄罗斯规则情况。

如果您想要丢弃场景,请尝试改变正在传输的数据量、连接的参数(使用其他构造函数方法),并查看超时是否在时间上一致,超时是否取决于通信量,这通常是您在防火墙等中间设备中触发某个阈值的线索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51999267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档