On Wed, 16 Jun 2021 07:56:11 GMT, Michael McMahon <micha...@openjdk.org> wrote:
> 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. This pull request has now been integrated. Changeset: 2d088fa9 Author: Michael McMahon <micha...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/2d088fa91d18252a801db3b84ff87e261d63ebd4 Stats: 1066 lines in 12 files changed: 1054 ins; 0 del; 12 mod 8268294: Reusing HttpClient in a WebSocket.Listener hangs. Reviewed-by: dfuchs ------------- PR: https://git.openjdk.java.net/jdk/pull/4506