如何使我的Jersey HTTPS客户端连接持久化?

时间:2015-11-02 03:28:47

标签: java jersey

[RedHat企业级linux服务器。 Java版本8. Jersey版本2.21。]

泽西岛有没有办法让HTTPS客户端连接持久?

(我正在读取HTTPS连接是持久的,但那不是 我与客户见过的行为。)

我想创建一个连接,使用POST来发送一些消息 相同的连接,最后断开连接。我想保持联系 打开,不要在POST之间关闭。

我有以下java Jersey代码:

// target is WebTarget
Response resp = target.request(mediaType).header("Connection", "keep-alive").post(Entity.entity(message, mediaType));    
for (i = 0; i < 5; i++) {
    Thread.sleep(5000);
    LogService.log(srcId, LogLevel.TRACE, "Sleeping...");
}
// log succeeded or failed message here

在netstat中,我看到ESTABLISHED连接显示,保持6-8秒, 然后走开我希望它保持开放,所以下一个POST可以使用 没有重新连接的相同连接。

使用-Djavax.net.debug = all运行,我看到了连接设置 并张贴了数据:

...
%% Cached client session: [Session-1, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
[read] MD5 and SHA1 hashes:  len = 16
...
Padded plaintext before ENCRYPTION:  len = 288
...
0010: 50 4F 53 54 20 2F 41 41   41 2F 4D 4E 4F 50 2F 20  POST /AAA/MNOP/
0020: 48 54 54 50 2F 31 2E 31   0D 0A 41 63 63 65 70 74  HTTP/1.1..Accept
0030: 3A 20 74 65 78 74 2F 70   6C 61 69 6E 3B 20 63 68  : text/plain; ch
0040: 61 72 73 65 74 3D 61 73   63 69 69 0D 0A 43 6F 6E  arset=ascii..Con
0050: 6E 65 63 74 69 6F 6E 3A   20 6B 65 65 70 2D 61 6C  nection: keep-al
0060: 69 76 65 0D 0A 43 6F 6E   74 65 6E 74 2D 54 79 70  ive..Content-Typ
0070: 65 3A 20 74 65 78 74 2F   70 6C 61 69 6E 3B 63 68  e: text/plain;ch
0080: 61 72 73 65 74 3D 61 73   63 69 69 0D 0A 55 73 65  arset=ascii..Use
0090: 72 2D 41 67 65 6E 74 3A   20 4A 65 72 73 65 79 2F  r-Agent: Jersey/
00A0: 32 2E 32 31 20 28 48 74   74 70 55 72 6C 43 6F 6E  2.21 (HttpUrlCon
00B0: 6E 65 63 74 69 6F 6E 20   31 2E 38 2E 30 5F 34 35  nection 1.8.0_45
00C0: 29 0D 0A 48 6F 73 74 3A   20 -- -- -- -- -- -- --  )..Host: xxxxxxx
00D0: -- -- -- -- -- -- 3A 38   30 38 35 0D 0A 43 6F 6E xxxxxx:8085..Con
00E0: 74 65 6E 74 2D 4C 65 6E   67 74 68 3A 20 36 33 35  tent-Length: 635
...
pool-1-thread-1, WRITE: TLSv1.2 Application Data, length = 288
[Raw write]: length = 293
...

然后我看到响应回来了:

...
pool-1-thread-1, READ: TLSv1.2 Application Data, length = 160
Padded plaintext after DECRYPTION:  len = 160
...
0010: 48 54 54 50 2F 31 2E 31   20 32 30 30 20 4F 4B 0D  HTTP/1.1 200 OK.
0020: 0A 43 6F 6E 6E 65 63 74   69 6F 6E 3A 20 6B 65 65  .Connection: kee
0030: 70 2D 61 6C 69 76 65 0D   0A 44 61 74 65 3A 20 46  p-alive..Date: F
0040: 72 69 2C 20 33 30 20 4F   63 74 20 32 30 31 35 20  ri, 30 Oct 2015
0050: 32 33 3A 33 37 3A 32 39   20 47 4D 54 0D 0A 43 6F  23:37:29 GMT..Co
0060: 6E 74 65 6E 74 2D 6C 65   6E 67 74 68 3A 20 30 0D  ntent-length: 0...
...
2015/303 23:37:34.826: TRACE myapp.BaseHttpsConnector.doPostFile:236 - Sleeping...
Keep-Alive-Timer, called close()
Keep-Alive-Timer, called closeInternal(true)
Keep-Alive-Timer, SEND TLSv1.2 ALERT:  warning, description = close_notify
Padded plaintext before ENCRYPTION:  len = 64
...
Keep-Alive-Timer, WRITE: TLSv1.2 Alert, length = 64
[Raw write]: length = 69
...
Keep-Alive-Timer, called closeSocket(true)
2015/303 23:37:39.829: TRACE myapp.BaseHttpsConnector.doPostFile:236 - Sleeping...
2015/303 23:37:44.831: TRACE myapp.BaseHttpsConnector.doPostFile:236 - Sleeping...
2015/303 23:37:49.833: TRACE myapp.BaseHttpsConnector.doPostFile:236 - Sleeping...
2015/303 23:37:54.836: TRACE myapp.BaseHttpsConnector.doPostFile:236 - Sleeping...
2015/303 23:37:54.836: INFO  myapp.BaseHttpsConnector.doPostFile:261 - POST of file {myfile.xml} succeeded: 200: OK

深埋在post()调用中,有一个Keep-Alive-Timer 在我完成之前,在连接上异步调用close() 任何带有Response对象的东西。 &#34;连接:保持活力&#34;安顿好了 POST和响应的标头。我也设置了系统 属性http.keepAlive在客户端为true,即使它是 默认无论如何。如何保持连接不被关闭,所以 当下一条消息需要在短时间后发布时, 客户端可以重用连接吗?

非常感谢你的帮助!

0 个答案:

没有答案