Я создал простое приложение node.js с двумя страницами. Лобби и игровая комната. Пользователь подключается к фойе, затем садится за стол, и игровое помещение открывается в новом окне. Таким образом, открываются два окна браузера, оба с собственным подключением сокетов.Сокеты не остаются подключенными к iPad/iphone?
Все отлично работает на моих компьютерах. Работает во всех браузерах, и пользователь остается подключенным в холле, когда они играют в игру в игровой комнате, когда я пингую сигнал назад и вперед.
Однако, на моем iPad или iPhone, когда я открываю игровой зал, соединение сокета с фойе заканчивается через короткое время.
Есть ли лучший способ заставить соединение сокета оставаться открытым на тех устройствах, которые отличаются от компьютера?
Вот код, у меня есть на сервере:
EDIT: Подключение к вестибюлю на самом деле не заканчивается мгновенно, когда это окно браузера больше не имеет фокус на мобильном устройстве, это только то, что сам по себе тайм-аут происходит после тайм-аута интервал.
Вот мой отладочный вывод:
получил понг Player1
получил понг Player1
получил понг Player1
получил понг Player1
получил понг Player1
{имя пользователя: 'Player2',
пароль: 'пароль' ,
browser_os: 'Mozilla/5.0 (iPad, CPU OS 5_1_1, как Mac OS X) AppleWebKit/534.46 (KHTML, например, Gecko) Версия/5.1 Mobile/9B206 Safari/7534.48.3'}
info - рукопожатие разрешено Ut2WHuhbDGsYzd6CRquX (игрок 2 входит в и рукопожатии и вестибюль)
подключения лоббировать
получили понг Player1
получили понг Player2 (первый понг от игрока 2)
информации - открывает рукопожатие уполномочили стола If6MFTkJqv3T_Mn5RquY (игра для игрока 2 - обратите внимание нет больше PONGS от игрока 2 !!)
получили понг Player1
получили понг Player1
получил понг Player1
информации - рукопожатие уполномочила agmZNNSnce0h68NSRquZ (игровой стол открывает для игрока 1)
получил понг Player1
получил понг Player1
получил понг Player1
получил понг Player1
получили понг Player1
получил понг Player1
получили понг Player1
информации - транспортный конец (сердцебиения таймаута)
лобби отключения (игрок 2 обрываются от лобби)
получил понг Player1
Это мой код на стороне сервера:
function sendHeartbeat(){
setTimeout(sendHeartbeat, 8000);
io.sockets.in('lobby1').emit('ping', { beat : '1' });
}
setTimeout(sendHeartbeat, 8000);
Это мой код на стороне клиента:
гнездо.на ('пинг', функции (MSG) {sendPong (MSG)});
function sendPong(msg) {
socket.emit('pong');
}
Я использую socket.io. Это не использует сам Websocket под обложками? Разве socket.io просто не работает с iphone/ipad? – a2zCribbage