(1) Сторона Android
Для создания соединения с веб-сокетом я реализовал библиотеку socket.io следующим образом в файле build.gradle
.
compile ('io.socket:socket.io-client:1.0.0') {
exclude group: 'org.json', module: 'json'
}
Вотфрагмент кода внутри Activity, который создает сокет и соединяется с базовым URL-адресом веб-сокета.
try {
socket = IO.socket(URLs.WEBSOCKET_BASE_URL);
socket.on(Socket.EVENT_CONNECT, onConnect);
socket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
socket.on(Socket.EVENT_DISCONNECT, onDisconnect);
socket.on(Consts.RESPONSE, onMessageReceived);
socket.connect();
} catch(URISyntaxException e) {
Log.e(TAG, "URISyntaxException caught: " + e.getMessage());
}
Когда соединение установлено, прослушиватель регистрирует, как определено в следующем фрагменте.
private final Emitter.Listener onConnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.e(TAG, "Websocket is successfully connected.");
}
};
И, нажимая кнопку, я посылаю сообщение с событием test
.
socket.emit("test");
(2) Backend (Flask)
Я написал часть, которая отвечает наtest
событие.
...
from flask_socketio import SocketIO
...
app = Flask(__name__)
sio = SocketIO(app)
...
@sio.on('test')
def process_request(data):
search_option = data[consts.SEARCH_OPTION]
search_keyword = data[consts.SEARCH_KEYWORD]
app.logger.info('search option: ' + search_option + ', search keyword: ' + search_keyword)
...
if __name__ == '__main__':
...
sio.run(app, host='0.0.0.0', port=12378, debug=True)
Но когда я запускаю событие test
из Android, серверная часть, похоже, не отвечает. Сама часть соединения вроде бы в порядке. Какую часть я должен исправить, чтобы она работала?