我正在为Android创建一个离子应用程序,它将通过套接字与一个简单的Node.js服务器进行通信。为此,我使用socket.io。我也在客户端使用Angular.js。
我一直在努力让这种联系工作大约一周。我不想在此添加,我绝不是专家,甚至习惯于javascript。我一直在排除问题和错误,但这一个错误让我破碎了。
无法加载资源:服务器响应状态为404(未找到) http://EXTERNAL_IP:3000/socket.io/?EIO=3&transport=polling&t=1431009277925-0
对我来说,这似乎是客户端试图从服务器获取socket.io文件,但该文件并不存在于服务器上。我在客户端的文件结构中本地有socket.io.js文件,并将其链接在html中,如下所示:
<script src="js/vendor/socket-io.js"></script>
当我通过实时重装服务器运行以及将应用程序部署到运行android 5.0的Galaxy S5时,我在控制台中出现此错误
我已尝试过很多来自本网站和其他人的建议,但无济于事。也许我的硬件设置有些东西不想玩得好吗?
但是该代码也拒绝使用。
server.js
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.on('echo', function(msg){
console.log("Recieved msg: " + msg);
socket.emit('echo', msg);
})
});
server.listen(3000);
services.js
angular.module('MyApp.services', []).factory('socketio', function($rootScope) {
var socket = io.connect("http://EXTERNAL_IP:3000");
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
controllers.js
angular.module("MyApp.controllers", [])
.controller("SocketCtrl", ["$scope", 'socketio', function($scope, socketio){
console.log("attempting to connect");
socketio.on("connect", function(){
console.log("Connected");
});
socketio.on("echo", function(msg){
console.log("Received msg: " + msg);
});
}]);
如果有人有任何指示,我会非常感激。
答案 0 :(得分:0)
我在this tutorial工作时遇到了这个问题,而cordova-plugin-whitelist解决了这个问题:
cordova plugin add cordova-plugin-whitelist
这就在index.html中的<title>
之上:
<meta http-equiv="Content-Security-Policy" content="default-src 'unsafe-eval' 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; connect-src http://my-server-name.com">
connect-src
是关键。根据{{3}},它“限制了你可以连接的起源(通过XHR,WebSockets和EventSource”。