说到长链接,对应的就是短链接了。下面先说明一下长链接和短链接的区别:java
compile ('io.socket:socket.io-client:0.8.3') {
// excluding org.json which is provided by Android
exclude group: 'org.json', module: 'json'
}
socket = IO.socket("http://localhost"); // 建立Socket.IO长链接对象 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) {} }); // 注册事件监听对象 各类Event socket.connect(); // 链接socket
这个库使用org.json来解析和组成JSON字符串。android
// 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]; } });
提供了以下的选项能够设置:git
IO.Options opts = new IO.Options(); opts.forceNew = true; opts.reconnection = false; socket = IO.socket("http://localhost", opts);
你可使用这些参数来配置选项。注:若是你不想重用缓存的socket实例来查询参数变化时,你应该使用forceNew选项。若是你的程序想要登出一个用户,再登陆一个新用户的时候可使用这种方式:github
IO.Options opts = new IO.Options(); opts.forceNew = true; opts.query = "auth_token=" + authToken; Socket socket = IO.socket("http://localhost", opts);
你能够获得一个回调来确认服务器收到一个消息:json
socket.emit("foo", "woot", new Ack() { @Override public void call(Object... args) {} });
反过来,你也能够发送一个确认消息,告诉服务器你收到了一个消息:api
// 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)的设置:浏览器
// default settings for all sockets IO.setDefaultSSLContext(mySSLContext); IO.setDefaultHostnameVerifier(myHostnameVerifier); // set as an option opts = new IO.Options(); opts.sslContext = mySSLContext; opts.hostnameVerifier = myHostnameVerifier; socket = IO.socket("https://localhost", opts);
查询更多Java文档能够查看:缓存
http://socketio.github.io/socket.io-client-java/apidocs/服务器
使用Transports访问Http头:(不经常使用,通常用来设置Cookie参数)cookie
// 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<String>> headers = (Map<String, List<String>>)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<String>> headers = (Map<String, List<String>>)args[0]; // access response headers String cookie = headers.get("Set-Cookie").get(0); } }); } });