找不到文件socket.io ionic

时间:2015-05-07 15:02:26

标签: android angularjs socket.io ionic-framework

我正在为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时,我在控制台中出现此错误

我已尝试过很多来自本网站和其他人的建议,但无济于事。也许我的硬件设置有些东西不想玩得好吗?

我一直在关注本教程: http://www.htmlxprs.com/post/6/creating-a-realtime-image-sharing-app-with-ionic-and-socketio-tutorial

但是该代码也拒绝使用。

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);
  });
}]);

如果有人有任何指示,我会非常感激。

1 个答案:

答案 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”。