【问题标题】:Socket.emit doesn't work with IonicSocket.emit 不适用于 Ionic
【发布时间】:2015-04-23 23:38:45
【问题描述】:

我正在尝试在我的 ionic 应用程序和我构建的套接字服务器之间创建一个套接字连接。

  • 在 iOS 模拟器中使用 ionic run ios --target="iPhone-6-Plus" 运行应用程序时,套接字连接将不起作用

  • 使用ionic serve在浏览器中为应用程序提供服务时,套接字连接有效。

我的代码

我的应用客户端中有一个连接到我的套接字服务器的套接字服务:

.factory('Sockets', function($http, socketFactory){

  var myIoSocket = io.connect('localhost:5000');

  var mySocket = socketFactory({
    ioSocket: myIoSocket
  });

  return mySocket;

})

这是我的客户端套接字请求的样子:

angular.module('crewapp.chat', [])
.controller('ChatController', function($scope, Auth, Sockets, $localStorage){
  $scope.test = 'Chats';
  Sockets.emit('join room', $localStorage.groupname)

});

这是我的套接字服务器(简而言之)的样子

io.sockets.on('connection', function(socket) {
  socket.on('join room', function(room) {
    socket.room = room;
    socket.join(room);
    console.log(room);
});

我的尝试

  1. 我试过看看 Socket.emit 是否在应用程序中定义:

  1. 我通过在socket.on('connection') 回调函数体中放置一个console.log 概括了套接字服务器应该记录的位置。

【问题讨论】:

  • 你应该尝试调出 safari 开发者工具,看看是否有任何 JS 错误被抛出。
  • 它实际上完全在浏览器中工作(没有抛出任何错误)。在为 iOS 构建时它不起作用。
  • 这就是我的意思,为模拟器打开 safari 开发工具。环境完全不同,所以我认为值得一试。 stackoverflow.com/a/16203106/580487

标签: javascript angularjs cordova sockets ionic-framework


【解决方案1】:

我发现了问题所在。当连接到 ionic / cordova 中的套接字服务器时,您必须在服务器 url 前面加上 http://。应用程序在浏览器中仍然可以工作的原因是浏览器会自动添加前缀。

.factory('Sockets', function($http, socketFactory){

  var myIoSocket = io.connect('http://localhost:5000');

  var mySocket = socketFactory({
    ioSocket: myIoSocket
  });

  return mySocket;

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2018-05-12
    • 2017-01-01
    • 2018-01-14
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多