看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议。它是实现了浏览器与服务器全双工通信(full-duplex)。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。
我们实现长链接如果不想自己写,可以使用第三方的开源框架来帮助我们实现,目前比较流行的主要是:
1.基于Java-WebSocket实现长链接
2.基于OkHttp实现长链接
两者的实现方法基本相同,我使用的是java-websocket,具体选择哪个大家可以根据需要自行选择。大家可以访问下面链接去下载java-websocket jar包或者添加依赖。
1.jar包地址:http://download.csdn.net/detail/qq_35980424/9889035
2.github地址:https://github.com/TooTallNate/Java-WebSocket
WebSocketUtils工具类:
public class WebSocketUtils {
//WebSocketClient 和 address
private WebSocketClient mWebSocketClient;
//8585为端口号,根据情况修改
private final String address = "websocket://请求的ip地址:8585";
/**初始化WebSocketClient
* @throws URISyntaxException
*/
public void initSocketClient() throws URISyntaxException {
if(mWebSocketClient == null) {
mWebSocketClient = new WebSocketClient(new URI(address)) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
Log.e("aaaa", "链接成功");
}
@Override
public void onMessage(String s) {
//服务端消息
Log.e("aaaa", "服务器返回了" + s);
}
@Override
public void onClose(int i, String s, boolean remote) {
//连接断开,remote判定是客户端断开还是服务端断开
if (remote) {
Log.e("aaaa", "服务器断开链接了");
} else {
Log.e("aaaa", "客户端断开链接了");
}
}
@Override
public void onError(Exception e) {
Log.e("aaaa", "错误"+e.getMessage());
}
};
}
}
//连接
public void connect() {
new Thread(){
@Override
public void run() {
mWebSocketClient.connect();
}
}.start();
}
//关闭连接
public void closeConnect() {
try {
mWebSocketClient.close();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
mWebSocketClient = null;
}
}
/**
*发送消息
*/
public void sendMsg(String msg) {
mWebSocketClient.send(msg);
}
}
我们通常会在Appliction中初始化连接,执行如下方法
/**
* 初始化socket
*/
public void initSoctet() {
socketConnect = new WebSocketUtils();
//长连接初始化
try {
socketConnect.initSocketClient();
//开始长连接
socketConnect.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
如果链接成功会打印出“连接成功”,这时我们就可以调用sendMsg(String msg)方法向服务器发送消息,如果发送成功,我们可以在下面的方法中接收到服务器返回的消息
@Override
public void onMessage(String s) {
//服务端消息
Log.e("aaaa", "服务器返回了" + s);
}
最后记得调用closeConnect()方法关闭连接,释放系统资源。

本文介绍如何利用HTML5的WebSocket协议实现浏览器与服务器之间的全双工通信,并提供了基于Java-WebSocket的实现示例代码。
4876

被折叠的 条评论
为什么被折叠?



