> 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 incrementally with one additional commit since the last revision: changed AtomicReference to CompletableFuture ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/4506/files - new: https://git.openjdk.java.net/jdk/pull/4506/files/4bf897f0..e898a9e2 Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4506&range=01 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4506&range=00-01 Stats: 32 lines in 2 files changed: 7 ins; 8 del; 17 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