Hi Pavel,
A few comments on the API:
- The Incoming class combines separate functions that would be easier to
use if the methods were directly on the Builder. It would also
allow (not require)
lambda's to be used or method references if the code was complex.
The Builder methods can use generic java.util.function interfaces
with the appropriate parameter types.
Each of the callbacks should include the websocket, though with
lambda it could capture
the WS as needed. For example, (also separating close and error
callbacks)
|WebSocket ws = WebSocket.newBuilder("ws://websocket.example.com")
.onReceiveText( (ws, text) -> System.out.println(text)) .onError( (ws,
t) -> t.printStackTrace()) .onClose( (ws, msg) ->
System.out.println("closing: " + msg)) .create();|
- The design to wrap the Outgoing data creates an extra step that
makes the API
a bit harder to use. It would be more natural to add the sendAsync
methods to WebSocket
and avoid the creation of extra objects.
|ws.sendAsync("hello"); ws.sendAsync(bytebuffer); // an alternate
signature could use varargs, ByteBuffer data... |
Roger
||
On 8/31/2015 10:30 AM, Pavel Rappo wrote:
Hi,
I would appreciate if you help to review a WebSocket client API proposed for
JDK 9. This work is a part of JEP-110 [1] and has started its public path with
HTTP client review in March this year [2].
Proposed WebSocket API is relatively small and focuses on convenient exchange of
data in a fully asynchronous fashion. API consists of 6 types located in the
java.net package [3]:
1. WebSocket
2. WebSocket.Builder
3. WebSocket.Incoming
4. WebSocket.Incoming.Chunks
5. WebSocket.Outgoing
6. WebSocketException
Starting point is a class description for java.net.WebSocket. Along with
in-javadoc examples, several API test samples are provided in the webrev [4] and
named test/java/net/WebSocket/Example%.java. They are only for informational
purposes and won't be included in the final version of the API.
I would appreciate any feedback on this API. Thanks.
-------------------------------------------------------------------------------
[1] http://openjdk.java.net/jeps/110
[2] http://mail.openjdk.java.net/pipermail/net-dev/2015-March/008932.html
[3] http://cr.openjdk.java.net/~prappo/8087113/javadoc.00/
[4] http://cr.openjdk.java.net/~prappo/8087113/webrev.00/
-Pavel