У меня работает работающий сервер nodejs (и через браузер socket.io работает отлично, отправляя и получая события).Чтобы легко смоделировать онлайн-соединение, я использую ngrok.io для туннелирования моего локального хоста.Это все хорошо работает.Я хотел написать небольшое приложение, которое подключается к тому же серверу, но хотя мой сервер может получать вызов socket.connect (), он не получает никаких событий .emit ().
(я использую com.github.nkzawa: socket.io-client: 1.0.0 и socket.io 2.1.1)
вот соответствующий код сервера:
io.on('connection', function (socket) {
console.log('Something has connected to the server: ' + socket.request.session.id);
socket.on('join', function (username) {
if(!username.username){
username = socket.request.session.username;
}else{
username = username.username;}
console.log('[Socket Chat] '+ username +' has connected to chat');
socket.broadcast.emit('sys message', username + " has joined the chat.");
});
});
Опять же, этот код работает хорошо.
остальные части приложения нормально подключаются к моему серверу expressjs и могут подключаться к базе данных для авторизации при входе и прочем.Таким образом, нет никаких проблем с самим соединением, только его часть socket.io.
Вот соответствующий код приложения (который я запускаю на своем телефоне):
private Socket mSocket;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
try {
//IO.Options opts = new IO.Options();
//opts.port = 3000; tried changing post but didn't help
mSocket = IO.socket(AppConfig.URL_CHAT); // URL_CHAT is correct, and its the same url I use with the browser
}
catch (URISyntaxException e) {
throw new RuntimeException(e);
}
mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); //theres an emitter.listener for these, and they do trigger if my url is incorrect or my internet is down
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.connect();
JSONObject obj = new JSONObject();
try {
obj.put("username", Nickname);
} catch (JSONException e) {
e.printStackTrace();
}
//mSocket.open();
mSocket.emit("join", obj);
Я перепробовал каждый методот любого другого ответа здесь до меру моих способностей.Когда я запускаю приложение, мой сервер печатает журнал «Кое-что подключено: $ id» с идентификатором сеанса, но событие соединения не запускается.на самом деле, у меня установлен сокет-шаблон, и он также не регистрирует какие-либо события, используя код:
socket.on('*', function (packet){
console.log(packet.data);
});
, который принимает все другие события из чата.
Я пытался отправлять различные виды событий, различные данные JSON, строки.Одна вещь, которую я заметил, это то, что в приложении socket.connected () возвращается как false, что странно, потому что мой сервер также обнаруживает, когда приложение отключается.
Я попытался понизить socket.io на узле до 2.0.0,но это также не работает.
Нет ошибок, которые появляются ни в одном журнале, поэтому я не могу полностью понять, что не так с этой вещью.как заставить мой сервер перехватывать события .emit ()?