У меня есть приложение для Android, и оно хорошо работает в моей локальной среде с nodejs и express.
У меня настроены nodejs и socket io на сервере, и мое приложение не может правильно подключиться к серверу.
Когда приложение открывает сокет, клиент io должен подключиться к серверу сокета io. Клиент может подключиться к серверу, так как сервер видит клиента и регистрирует его ... но когда я пытаюсь что-то отправить с клиента или с сервера, он не достигает своего места назначения.
Это часть моего Android-клиента
socket = IO.socket(SERVER_ADDRESS);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
NifiLog.log("Connected To Socket IO"); //this does not work
AccessUtils.setOnlineStatus(context, "online");
if(AccessUtils.getUser(context)!=null&&AccessUtils.getUser(context).get_id()!=null){
socket.emit("online_acknowledgement", AccessUtils.getUser(context).get_id(),AccessUtils.getToken(context), new Ack() {
@Override
public void call(Object... args) {
String response = (String) args[0];
}
});
}
}
}).on("friend_online", new Emitter.Listener() {
@Override
public void call(Object... args) {
User friend = NifiGson.getGson().fromJson(args[0].toString(), User.class);
addFriend(friend);
eventBus.postSticky(new FriendOnlineEvent(friend));
}
})
NifiLog.log («Подключен к сокету ввода-вывода»); никогда не встречается
Вот мой сервер настройки
location / {
proxy_pass http://localhost:3040;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_request_buffering off;
proxy_buffering off;
proxy_read_timeout 180s;
}
location /socket {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://localhost:3030;
}
узел js работает на порту 3040, а сокет io - на порту 3030
Сокет io на сервере
const express = require('express');
var http = require('http').Server(express);
global.io = require('socket.io')(http);
const server = app.listen(config.port, function(){
console.log("Express started on " +config.base_url +' in '+config.env +' environment. Press Ctrl + C to terminate');
mongoose.connect(config.db.uri, config.db.options)
.then(()=> { log.info(`Succesfully Connected to the Mongodb Database at URL : `+config.db.uri)})
.catch((error)=> { log.error(error)})
});
require('./routes/socketio_routes.route');
http.listen(config.socket_port, function(){
console.log('Socket IO listening on *:'+config.socket_port); //this works
});
io.on('connection', function(socket){
console.log('a user connected'); //this works
socket.on('online_acknowledgement', function(id, token, acknowledgement){
}
socket.on('disconnect', function(data){
console.log('a user disconnected #######'); //this works
}
socket.on('game_start', function(game, token){
console.log('a game start'); //client sends this to server but it never reaches here - this never works
}
}
Спасибо за помощь.