我无法在 apache cordova 应用程序中建立 socket.io 服务器和 socket.io 客户端之间的连接。它只是不会连接到我在 node.js 中运行的服务器。
我的socket.io服务端代码如下:
var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function(socket) {
console.log('socket connected');
socket.on('disconnect', function () {
console.log('socket disconnected');
});
socket.emit('text', 'wow. such event. very real time.');
});
server.listen(3000);
我的cordova js代码如下:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log("Hello from app 1234");
var socket = io('http://localhost:3000', {reconnect: true});
console.log("socket created");
socket.on('connect', function() {
console.log("Connection created!");
alert("connection ok");
socket.on('text', function(text) {
alert(text);
});
});
}
当我使用 cordova serve 在我的浏览器中本地执行它时,它运行良好。 当我对任何服务器执行常规 XMLHttpRequest() 时也很好,我测试了它并且能够很好地接收 JSON。
错误:
"socket.io-client:manager connect_error +49ms"
"engine.io-client:socket socket error %j +50ms",Error: xhr poll error
"socket.io-client:manager connect attempt will timeout after %d +113ms",20000
"engine.io-client:polling-xhr xhr poll +5s"
"engine.io-client:polling-xhr xhr data %s +1ms",null
"engine.io-client:socket setting transport %s +110ms","polling"
"engine.io-client:polling-xhr xhr open %s: %s +28ms","GET","http://localhost:3000/socket.io/?EIO=2&transport=polling&t=1481551911376-8"
我的问题可能是什么,我该如何进一步调试它?
编辑:我正在使用 cordova emulate android
在模拟器上测试它
最佳答案
在真实的设备
甚至模拟器
上使用localhost
,总是指ip
设备或模拟器本身。这也解释了为什么它在您的 浏览器
中使用 cordova serve
工作。
您必须使用计算机的本地 ip,而不是使用 localhost
。例如,您可以使用 ipconfig
从 Windows 命令提示符(例如 cmd.exe
)获取它。
关于javascript - Cordova Socket io xhr 轮询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41104002/