RFR: 8268294: Reusing HttpClient in a WebSocket.Listener hangs. [v4]
Michael McMahon
michaelm at openjdk.java.net
Wed Jun 16 12:07:25 UTC 2021
> Hi,
>
> This fixes a problem where the listener methods of a WebSocket client were being invoked by the Selector manager thread, which is problematic, because if the implementation of any of these methods tries to do any blocking work, this impacts other http activity, and if the blocking work is a http client call, then a hang can result. The fix makes the HttpClient's executor available to WebSocketImpl and that is used to offload the listener invocations.
>
> The fix also adds a more comprehensive test framework for WebSockets (in WebSocketServer). Up to now we just had a limited server side in the tests that can only do the handshake. This change adds an API and implementation for server's to receive websocket messages and send replies back to clients. To implement this, the server hooks into WebSocket's Frame, MessageEncoder and MessageDecoder classes. Therefore, the implementations of these classes had to be modified to allow for the encoding of server generated messages and the decoding of client generated messages. The only difference between client and server in this respect relates to payload masking which is only done for messages sent from client to server.
>
> There's a couple of warts that I wasn't sure what to do with. 1) There is already a copy of the Frame implementation class in the test hierarchy. I presume this is used by other tests, but that implementation is not used by this change. 2) The WebSocketServer is based on the existing DummyWebSocketServer class which is used by other tests. I can't see any easy way to refactor/combine these implementations.
>
> Thanks,
>
> Michael.
Michael McMahon has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
- Merge branch 'master' into websocket
- fixed small error in previous update. Doesn't affect test, but just looks odd
- changed AtomicReference to CompletableFuture
- add comments to test
- fix implementation plus some extra websocket test work
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/4506/files
- new: https://git.openjdk.java.net/jdk/pull/4506/files/4a8cb7e6..8f279da9
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4506&range=03
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4506&range=02-03
Stats: 17671 lines in 424 files changed: 13871 ins; 1918 del; 1882 mod
Patch: https://git.openjdk.java.net/jdk/pull/4506.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/4506/head:pull/4506
PR: https://git.openjdk.java.net/jdk/pull/4506
More information about the net-dev
mailing list