android java socket.io не отправляет никаких событий на сервер nodejs - PullRequest
0 голосов
/ 12 октября 2018

У меня работает работающий сервер 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 ()?

1 Ответ

0 голосов
/ 13 октября 2018

Я понял, вот ответ для тех, у кого есть подобная проблема.
Сервер сокетов находится на site.com/chat.когда я сделал IO.socket (URL), то решил, что пространством имен по умолчанию будет «/ chat», а это не так.Вот почему мои события .on () не срабатывают.если я добавлю io.of ('/ chat') на мой сервер, это событие сработает.

поэтому одним из решений было бы сделать пространство имен по умолчанию "/ chat", но я пошел с чем-то немного другим и добавил

Manager manager = new Manager(new URI("site.com/chat"));
mSocket = manager.socket("/"); 

, так что теперь мои emit () работают!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...