Подключение Socket.io работает только один раз - PullRequest
0 голосов
/ 11 марта 2020

Я использую эту библиотеку (socket.io) в своем приложении для мгновенного обмена сообщениями с использованием веб-сокетов.

Есть 2 экрана - Home и Chat. После ввода формы с экрана Home приложение переходит на экран Chat, в методе initState() которого я написал код для установки sh соединения сокета:

IO.Socket socket;
void initState() {
    socket = IO.io('http://localhost:3000', <String, dynamic>{
        'transports': ['websocket'],
        'query': {
            'timeStamp': new DateTime.now().millisecondsSinceEpoch
        }
    });

    socket.on('connect', (_) {
         print("debug: connected");
    });
});

Соединение работает при первом переходе от Home к Chat. Но если я вернусь на страницу Home и вернусь к Chat, соединение не будет работать. В чем может быть причина?

Это код для возврата на страницу Home:

onPressed: () {
                socket.destroy();
                Navigator.pushAndRemoveUntil(
                    context,
                    MaterialPageRoute(
                      builder: (context) => MyHomePage(),
                    ),
                    (x) => false);
              },

На сокете внутри метода dispose() виджета не выполняется никаких действий .

1 Ответ

0 голосов
/ 12 марта 2020

Это потому, что он пытается повторно использовать один и тот же сокет для соединений с одним и тем же хостом. Решение заключается в использовании 'force new connection': true при подключении.

socket = IO.io('http://localhost:3000', <String, dynamic>{
    'transports': ['websocket'],
    'force new connection': true,
    'query': {
         'timeStamp': new DateTime.now().millisecondsSinceEpoch
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...