WebSocket支持二进制的发送,见jetty官网:
Blocking Send Message 阻塞式
Most calls are blocking in nature, and will not return until the send has completed (or has thrown an exception).
RemoteEndpoint remote = session.getRemote(); // Blocking Send of a BINARY message to remote endpointByteBuffer buf = ByteBuffer.wrap(new byte[] { 0x11, 0x22, 0x33, 0x44 });try{ remote.sendBytes(buf);}catch (IOException e){ e.printStackTrace(System.err);}
Send Partial Message 分块式
RemoteEndpoint remote = session.getRemote(); // Blocking Send of a BINARY message to remote endpoint// Part 1ByteBuffer buf1 = ByteBuffer.wrap(new byte[] { 0x11, 0x22 });// Part 2 (last part)ByteBuffer buf2 = ByteBuffer.wrap(new byte[] { 0x33, 0x44 });try{ remote.sendPartialBytes(buf1,false); remote.sendPartialBytes(buf2,true); // isLast is true}catch (IOException e){ e.printStackTrace(System.err);}
Async Send Message 异步
//Example 29.7. Send Binary Message (Async Simple)RemoteEndpoint remote = session.getRemote(); // Async Send of a BINARY message to remote endpointByteBuffer buf = ByteBuffer.wrap(new byte[] { 0x11, 0x22, 0x33, 0x44 });remote.sendBytesByFuture(buf);
// Example 29.8. Send Binary Message (Async, Wait Till Success)RemoteEndpoint remote = session.getRemote(); // Async Send of a BINARY message to remote endpointByteBuffer buf = ByteBuffer.wrap(new byte[] { 0x11, 0x22, 0x33, 0x44 });try{ Futurefut = remote.sendBytesByFuture(buf); // wait for completion (forever) fut.get();}catch (ExecutionException | InterruptedException e){ // Send failed e.printStackTrace();}How to send a simple Binary message using the RemoteEndpoint, tracking the Future to know if the send succeeded or failed.
//Example 29.9. Send Binary Message (Async, timeout of send)RemoteEndpoint remote = session.getRemote(); // Async Send of a BINARY message to remote endpointByteBuffer buf = ByteBuffer.wrap(new byte[] { 0x11, 0x22, 0x33, 0x44 });Futurefut = null;try{ fut = remote.sendBytesByFuture(buf); // wait for completion (timeout) fut.get(2,TimeUnit.SECONDS);}catch (ExecutionException | InterruptedException e){ // Send failed e.printStackTrace();}catch (TimeoutException e){ // timeout e.printStackTrace(); if (fut != null) { // cancel the message fut.cancel(true); }}