Частые отключения с XHR-Polling, Socket.io и Titanium - PullRequest
3 голосов
/ 14 января 2012

Я использую Socket.io на платформе Titanium через https://github.com/nowelium/socket.io-titanium. Пока что этот "порт" поддерживает только транспорт опроса XHR.В прошлом я имел успех с Socket.io, используя транспорт Websocket.

Проблема, с которой я столкнулся сейчас, заключается в том, что мое сокетное соединение, кажется, «обрывается» каждые 10 секунд на несколько секунд за раз.Это означает, что сообщения чата отбрасываются и т. Д. Является ли это ожидаемым поведением при опросе XHR - нужно ли мне внедрить систему очередей - или есть какой-то способ найти решение этой проблемы?

   debug - setting poll timeoutdebug - discarding transport
   debug - cleared close timeout for client 407473253144647189
   debug - clearing poll timeout
   info  - transport end
   debug - set close timeout for client 407473253144647189
   debug - cleared close timeout for client 407473253144647189
   debug - discarding transport
   debug - client authorized
   info  - handshake authorized 4149191422068834219
   debug - setting request GET /socket.io/1/xhr-polling/4149191422068834219?t=Thu%20Jan%2012%202012%2022%3A37%3A47%20GMT-0800%20%28PST%29
   debug - setting poll timeout
   debug - client authorized for 
   debug - clearing poll timeout
   debug - xhr-polling writing 1::
   debug - set close timeout for client 4149191422068834219
Connection
   debug - setting request GET /socket.io/1/xhr-polling/4149191422068834219?t=Thu%20Jan%2012%202012%2022%3A37%3A47%20GMT-0800%20%28PST%29
   debug - setting poll timeout
   debug - discarding transport
   debug - cleared close timeout for client 4149191422068834219
Last login: Fri Jan 13 00:04:14 on ttys003

1 Ответ

1 голос
/ 13 августа 2012

Почему бы вам не загрузить socket.io.js в веб-представлении и перекачать события через Ti.App.fireEvent / addEventListener? Это дает вам WebSockets, которые не имеют ограничений опроса.

<html>
<head>
    <script src="http://63.10.10.123:1337/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://63.10.10.123:1337');
        socket.on('onSomething', function (data) {
            Ti.App.fireEvent('onSomething', data);
        });
        Ti.App.addEventListener('emitSomething', function (data) {
            socket.emit('emitSomething', data);
        });
    </script>
</head>
<body>
</body>
</html>

РЕДАКТИРОВАТЬ: я хочу отметить, что я сделал это в проекте, и это было очень часто сбой моего приложения на iOS. Я огляделся, и другие разработчики тоже били это, даже не используя Titanium. Я бы не рекомендовал использовать этот подход или, по крайней мере, очень тщательно его тестировать (особенно в фоновом режиме и возобновлении работы приложения). Вместо этого я использую TCP-сокеты Appcelerator с собственным протоколом light для потоковой передачи данных с клиента на сервер и с сервера на клиент.

...