【发布时间】:2017-11-10 10:13:23
【问题描述】:
我正在尝试通过 websocket 发送数据并接收相同的回声。当我尝试通过后台线程发送它时,我没有收到回声。有什么问题?通过后台线程发送数据是否不正确?如果有,为什么?
请检查我的代码以及随附的相关日志。
private final class EchoWebSocketListener extends WebSocketListener {
private static final int NORMAL_CLOSURE_STATUS = 1000;
@Override
public void onOpen(final WebSocket webSocket, Response response) {
class SendData extends AsyncTask {
@Override
protected void onPreExecute(){
Log.d("Websocket","In Pre-execute");
webSocket.send("In pre-execute");
}
@Override
protected Object doInBackground(Object[] objects) {
Log.d("AsyncTask","In doInBackground");
//The below statement receives no echo
webSocket.send("doInBackground");
Log.d("AsyncTask","In END of doInBackground");
return null;
}
}
new SendData().execute();
webSocket.send(ByteString.decodeHex("1245"));
webSocket.close(NORMAL_CLOSURE_STATUS, "Goodbye !");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
Log.i("Receiving : ",text);
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
Log.i("Receiving bytes : " , bytes.hex());
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(NORMAL_CLOSURE_STATUS, null);
Log.i("Closing : " , code + " / " + reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
Log.i("Error", "Error in WebsocketEcho");
}
}
日志:
D/AsyncTask: In Pre-execute
D/AsyncTask: In doInBackground
D/AsyncTask: In END of doInBackground
I/Receiving :: In pre-execute
I/Receiving bytes :: 1245
I/Closing :: 1000 / Goodbye !
【问题讨论】:
-
为什么在后台线程中使用套接字?
-
我正在尝试从后台运行的某个源中获取一些数据并通过 webSocket 发送。如果我尝试在主线程上执行此操作,则会收到一条错误消息,提示帧太多,跳过了一些帧。运行时我不需要在屏幕上显示任何内容,因此我想我可以尝试在后台执行此操作。如果我错了,请纠正我
-
好友获取数据后通过异步任务获取数据,然后使用它并将其提供给套接字
标签: android multithreading websocket android-asynctask java-websocket