說到長鏈接,對應的就是短鏈接了。下面先說明一下長鏈接和短鏈接的區別: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); } }); } });