【发布时间】:2015-01-18 11:24:02
【问题描述】:
我在这里和其他各种网站上看到了很多关于如何让 socket.io 在 android phonegap 应用程序中工作的帖子,不幸的是我似乎仍然遇到问题。如果您有任何设置这种东西的经验,您可以提供的任何指示将不胜感激,现在已经花了几天时间把我的头发扯掉了:P
所以要开始,我有一个非常简单的 socket.io 服务器设置并在我的本地机器上运行:
var server = require('http').createServer();
var io = require('socket.io')(server);
io.sockets.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);
我从我找到的一个教程中得到的,它似乎工作正常。
现在在我的 phonegap 应用程序中,我拥有的所有代码如下:
var app = angular.module("MyApp", [
"MyCtrl"
]);
app.controller("AppCtrl", ["$scope", function ($scope) {
console.log("About to attempt a connection (" + socket + ")!");
var socket = io("10.0.5.159:3000");
socket.on("connect", function(data) {
console.log("Connected: " + data);
});
socket.on("error", function(err) {
console.log("Error: " + err);
});
}]);
只是一个基本的 angular.js 应用程序,带有一个尝试连接到服务器的控制器(提供的 IP 地址是我本地网络上的正确地址)。我的日志被击中,所以我知道这段代码已执行,但我从未收到连接事件或错误事件,控制台中也没有出现错误,它似乎只是默默地失败了。我在服务器上也没有收到任何连接事件。
根据另一个 stackoverflow 帖子,我已确保我的 config.xml 包含适当的
<access origin="10.0.5.159*" />
条目。但我似乎仍然无处可去。同一行代码
var socket = io("10.0.5.159:3000");
在 safari 浏览器窗口中执行时完全按预期工作,并且我的服务器记录了一个连接事件,所以我确信服务器和连接代码是有效的。
有什么想法我可能做错了吗?
【问题讨论】:
-
您是否尝试将响应标头(
Access-Control-Allow-Origin: *)从node.js服务器设置到客户端? -
我刚刚尝试过设置,不幸的是,您使用 socket.io 设置的位置在连接事件处理程序中,而我从未收到连接事件。
-
如果其他人遇到这个问题,我需要在我的 config.xml 中使用来自stackoverflow.com/questions/15023185/… 的答案,并在我的 IP 地址前加上“http://”!
标签: android angularjs sockets cordova socket.io