既生HTTP何生WebSockt
与服务端交互的协议中,HTTP只能被动接收客户端请求,然后响应。而WebSocket在客户端与服务端建立连接以后,服务端可以主动发消息给客户端。这就是WebSocket的特点。
应用
因为服务端可以主动发消息的特性,WebSocket在以下场景使用非常多:
1、推送
2、聊天室
3、开发工具
4…
大部分功能依赖于产品的业务,投入使用可能比较困难,而开发工具是开发人员可以肆意发挥的地方!
ReactNative中WebSocket的使用
ReactNative开发过程中,pc端可以控制android端重新加载、打印堆栈等等。这些的实现都依赖于WebSocket。
com.facebook.react.packagerconnection.ReconnectingWebSocket
实现了WebSocket的连接,使用了okhttp。
final public class ReconnectingWebSocket extends WebSocketListener {
public ReconnectingWebSocket(
String url,
MessageCallback messageCallback,
ConnectionCallback connectionCallback) {
super();
mUrl = url;
mMessageCallback = messageCallback;
mConnectionCallback = connectionCallback;
mHandler = new Handler(Looper.getMainLooper());
}
public void connect() {
if (mClosed) {
throw new IllegalStateException("Can't connect closed client");
}
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(0, TimeUnit.MINUTES) // Disable timeouts for read
.build();
Request request = new Request.Builder().url(mUrl).build();
httpClient.newWebSocket(request, this);
}
}
JSPackagerClient
包装了ReconnectingWebSocket
,在onMessage
回调处分发服务端下发的命令:
final public class JSPackagerClient implements ReconnectingWebSocket.MessageCallback {
private ReconnectingWebSocket mWebSocket;
public JSPackagerClient(
String clientId, PackagerConnectionSettings settings,
Map