经常与XHR-Polling,Socket.io和Titanium断开连接

时间:2012-01-14 00:22:30

标签: xmlhttprequest titanium socket.io

我通过https://github.com/nowelium/socket.io-titanium在Titanium框架上使用Socket.io。到目前为止,该“端口”仅支持XHR轮询传输。过去,我使用Websocket传输在Socket.io上取得了成功。

我现在遇到的问题是我的套接字连接似乎每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 个答案:

答案 0 :(得分:1)

为什么不在Web视图中加载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的情况下也是如此。我不建议采用这种方法,或者至少,非常彻底地测试它(特别是后台处理和恢复应用程序)。相反,我使用Appcelerator的TCP套接字和我自己的光协议来将数据从客户端传输到服务器,从服务器传输到客户端。