2019-09-25 新加测试地址 :wss://echo.websocket.org //https://www.websocket.org/echo.html
//发送 String 数据
void send(String text);
//发送 byte[] 数据
void send(byte[] bytes);
//发送 ByteBuffer 数据
void send(ByteBuffer byteBuffer);
除了上述三个常规的发送数据方法外,还提供了用于发送 ping/pong 的方法
//发送 ping
void sendPing();
//发送 pong
void sendPong();
//发送 pong
void sendPong(PingFrame pingFrame);
正文:
项目需要使用socket推送 使用了一个第三方的websocket 。记录笔记
Gradle 方式集成
在对应 model 的 build.gradle 中添加依赖:
implementation 'com.github.0xZhangKe:WebSocketDemo:3.1'
在 activity 或者 Myapplication 进行websocket 设置和连接
private void initWebSocket(){
WebSocketSetting setting = new WebSocketSetting();
//连接地址,必填,例如 wss://echo.websocket.org
setting.setConnectUrl("your connect url");//必填
//设置连接超时时间
setting.setConnectTimeout(15 * 1000);
//设置心跳间隔时间
setting.setConnectionLostTimeout(60);
//设置断开后的重连次数,可以设置的很大,不会有什么性能上的影响
setting.setReconnectFrequency(60);
// //设置Header
// setting.setHttpHeaders(header);
//设置消息分发器,接收到数据后先进入该类中处理,处理完再发送到下游
setting.setResponseProcessDispatcher(new AppResponseDispatcher());
//接收到数据后是否放入子线程处理,只有设置了 ResponseProcessDispatcher 才有意义
setting.setProcessDataOnBackground(true);
//网络状态发生变化后是否重连,
//需要调用 WebSocketHandler.registerNetworkChangedReceiver(context) 方法注册网络监听广播
setting.setReconnectWithNetworkChanged(true);
//通过 init 方法初始化默认的 WebSocketManager 对象
WebSocketManager manager = WebSocketHandler.init(setting);
//启动连接
manager.start();
//注意,需要在 AndroidManifest 中配置网络状态获取权限
//注册网路连接状态变化广播
WebSocketHandler.registerNetworkChangedReceiver(this);
}
在 activity 中注册socket监听
p rivate SocketListener socketListener = new SimpleListener() { @Override public void onConnected() { appendMsgDisplay("onConnected"); } @Override public void onConnectFailed(Throwable e) { if (e != null) { appendMsgDisplay("onConnectFailed:" + e.toString()); } else { appendMsgDisplay("onConnectFailed:null"); } } @Override public void onDisconnect() { appendMsgDisplay("onDisconnect"); } @Override public void onSendDataError(ErrorResponse errorResponse) { appendMsgDisplay(errorResponse.getDescription()); errorResponse.release(); } @Override public <T> void onMessage(String message, T data) { if (data instanceof CommonResponseEntity) { CommonResponseEntity responseEntity = (CommonResponseEntity) data; appendMsgDisplay(responseEntity.getMessage()); } } };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
WebSocketHandler.getDefault().addListener(socketListener);
}
//发送数据 private void initView() { tvMsg = (TextView) findViewById(R.id.tv_msg); findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String text = etContent.getText().toString(); if (TextUtils.isEmpty(text)) { Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show(); return; } WebSocketHandler.getDefault().send(text); } }); }
在onDestroy 移除 监听
@Override protected void onDestroy() { super.onDestroy(); WebSocketHandler.getDefault().removeListener(socketListener); } private void appendMsgDisplay(String msg) { StringBuilder textBuilder = new StringBuilder(); if (!TextUtils.isEmpty(tvMsg.getText())) { textBuilder.append(tvMsg.getText().toString()); textBuilder.append("\n"); } textBuilder.append(msg); textBuilder.append("\n"); tvMsg.setText(textBuilder.toString()); }
也可以直接移到service中使用