socket.io-client-java

by socketio

Full-featured Socket.IO Client Library for Java, which is compatible with Socket.IO v1.0 and later.

4.5K Stars 855 Forks Last release: Not found Other 268 Commits 23 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Socket.IO-client Java

Build Status

This is the Socket.IO v1.x Client Library for Java, which is simply ported from the JavaScript client.

See also:

Installation

The latest artifact is available on Maven Central. You'll also need dependencies to install.

Maven

Add the following dependency to your

pom.xml
.
  
    io.socket
    socket.io-client
    1.0.0
  

Gradle

Add it as a gradle dependency for Android Studio, in

build.gradle
:
compile ('io.socket:socket.io-client:1.0.0') {
  // excluding org.json which is provided by Android
  exclude group: 'org.json', module: 'json'
}

Socket.IO Server 1.x suppport

The current version of socket.io-client-java doesn't support socket.io server 1.x. Please use socket.io-client-java 0.9.x for that instead.

Usage

Socket.IO-client Java has almost the same api and features with the original JS client. You use

IO#socket
to initialize
Socket
:
socket = IO.socket("http://localhost");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

@Override public void call(Object... args) { socket.emit("foo", "hi"); socket.disconnect(); }

}).on("event", new Emitter.Listener() {

@Override public void call(Object... args) {}

}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

@Override public void call(Object... args) {}

}); socket.connect();

This Library uses org.json to parse and compose JSON strings:

// Sending an object
JSONObject obj = new JSONObject();
obj.put("hello", "server");
obj.put("binary", new byte[42]);
socket.emit("foo", obj);

// Receiving an object socket.on("foo", new Emitter.Listener() { @Override public void call(Object... args) { JSONObject obj = (JSONObject)args[0]; } });

Options are supplied as follows:

IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = false;

socket = IO.socket("http://localhost", opts);

You can supply query parameters with the

query
option. NB: if you don't want to reuse a cached socket instance when the query parameter changes, you should use the
forceNew
option, the use case might be if your app allows for a user to logout, and a new user to login again:
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.query = "auth_token=" + authToken;
Socket socket = IO.socket("http://localhost", opts);

You can get a callback with

Ack
when the server received a message:
socket.emit("foo", "woot", new Ack() {
  @Override
  public void call(Object... args) {}
});

And vice versa:

// ack from client to server
socket.on("foo", new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    Ack ack = (Ack) args[args.length - 1];
    ack.call();
  }
});

SSL (HTTPS, WSS) settings:

OkHttpClient okHttpClient = new OkHttpClient.Builder()
  .hostnameVerifier(myHostnameVerifier)
  .sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
  .build();

// default settings for all sockets IO.setDefaultOkHttpWebSocketFactory(okHttpClient); IO.setDefaultOkHttpCallFactory(okHttpClient);

// set as an option opts = new IO.Options(); opts.callFactory = okHttpClient; opts.webSocketFactory = okHttpClient; socket = IO.socket("https://localhost", opts);

See the Javadoc for more details.

http://socketio.github.io/socket.io-client-java/apidocs/

Transports and HTTP Headers

You can access transports and their HTTP headers as follows.

// Called upon transport creation.
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    Transport transport = (Transport)args[0];

transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    @SuppressWarnings("unchecked")
    Map<string list>&gt; headers = (Map<string list>&gt;)args[0];
    // modify request headers
    headers.put("Cookie", Arrays.asList("foo=1;"));
  }
});

transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    @SuppressWarnings("unchecked")
    Map<string list>&gt; headers = (Map<string list>&gt;)args[0];
    // access response headers
    String cookie = headers.get("Set-Cookie").get(0);
  }
});

} });

Features

This library supports all of the features the JS client does, including events, options and upgrading transport. Android is fully supported.

License

MIT

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.