xhr poll错误出现在使用socket.io时抛出

时间:2014-10-31 05:06:02

标签: node.js cordova express socket.io xmlhttprequest

我写了一个关于socket.io的非常简单的演示并且我使用phonegap打包它。我发现有问题。在我打开我的应用程序大约十秒后,由于xhr轮询错误,连接将断开连接。如果我在断开连接事件中刷新页面,则错误不会再次出现。 我使用1.2.0版本。这是我的代码。我已经简化了它。

服务器:



var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');

var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());


app.use(express.static(path.join(__dirname, 'public')));


io.sockets.on('connection', function (socket) {

    console.log("disconnect--"+socket.id+"--"+io.sockets.server.eio.clientsCount);

    socket.on('disconnect', function () {
        console.log("disconnect--"+io.sockets.server.eio.clientsCount);
    });

});

http.listen(80, function () {
    console.log("server statrt");
});




客户端:



 $(document).ready(function () {

                var socket = io("http://192.168.0.106:80");

                socket.on('connect', function () {
                    alert("connect");
                });

                socket.on('error', function (data) {
                    alert(data);
                });

                socket.on('disconnect', function () {
                    alert("disconnect");
                });

                socket.on("reconnect", function () {
                    alert("reconnect");
                })

            });




感谢help.my英语不是很好

2 个答案:

答案 0 :(得分:2)

当触发deviceready事件时,您必须打开socket.io连接。

document.addEventListener('deviceready', function() {

    var socket = io("http://192.168.0.106:80");

    socket.on('connect', function() {
        alert("connect");
    });

    socket.on('error', function (data) {
        alert(data);
    });

    socket.on('disconnect', function () {
        alert("disconnect");
    });

    socket.on("reconnect", function () {
        alert("reconnect");
    });

});

Socket.io example

答案 1 :(得分:0)

对于使用Google Chrome的用户,FYI Chrome不会触发'deviceready'。相反,您应该使用'DOMContentLoaded'