仅限socket.io

时间:2017-08-13 15:16:33

标签: javascript node.js socket.io openshift

我在openshift v2中托管了两个应用程序,两者都有相同代码,第一个使用Node.js 0.10,socket.io完美运行。第二个应用程序使用Node.js 8.2.1但socket.io不起作用,我得到的错误与这些其他站点相同:

Client side receive polling on socket.io

Socket.io cannot connect, resorts to “polling”

Socket.io connection reverts to polling, never fires the 'connection' handler

我尝试做出答案,但没有结果,如果我的两个应用程序中的代码相同..什么可能失败?有必要在新版本的Node.js中进行一些更改吗?

这是我的申请中的相关代码及其相关信息:

两个应用程序都可以在端口8080或3000上完美运行。

服务器

App.js

var fs = require('fs');
var express = require('express');
var app = express();
var server = require('http').Server(app);
var bodyParser = require ('body-parser');
var jwt = require('jsonwebtoken'); 
var io = require('socket.io')(server);

var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var server_port = process.env.OPENSHIFT_NODEJS_PORT || 3000;

server.listen(server_port, server_ip_address, function () {
      console.log( "APP Listening on: " + server_ip_address + ":" + server_port )
    }); 

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static(__dirname + '/')); 

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});


io.on('connection', function (socket) { 

    console.log('USUARIO CONECTADO');

    socket.on('coordenada', function (data) {

        io.emit('notificacion', {
            Latitud: data.latitudData,
            Longitud: data.longitudData,
            Nombre: data.name
        });
    }); 
});

客户端

Controllers.js

app.controller('mapCtrl',function($ scope,NgMap,socket){

vm = this;

socket.on('notificacion', function(data) {

    console.log("coordenada recibida: ", data.Latitud +","+ data.Longitud +" de "+ data.Nombre);

    var name = data.Nombre;

    vm.transportistas = [
        {id:'1', nombre: data.Nombre, posicion:[data.Latitud, data.Longitud]}
      ];

    NgMap.getMap().then(function(map) {
        vm.map = map;
        google.maps.event.trigger(vm.map, 'resize');
    });

});

vm.wayPoints = [
     {location: {lat:39.502223, lng: -0.363244}},
   ];

NgMap.getMap()
    .then(function(map) {

        vm.map = map;

        vm.map.setZoom(6);
        vm.map.setCenter(new google.maps.LatLng(40, -4));

  });

vm.mostrarDetalles = function(e, transportista) {
    vm.transportista = transportista;
    vm.map.showInfoWindow('foo-iw', transportista.id);
  };

});

factorias.js

app.factory('socket', ['$rootScope', function($rootScope) {
  var socket = io.connect();

  return {
    on: function(eventName, callback){
      socket.on(eventName, callback);
    },
    emit: function(eventName, data) {
      socket.emit(eventName, data);
    }
  };
}]);

我只能在带有Node.js 8.2.1的应用程序中使用Web控制台:

GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081140-15
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080247-12
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080252-13
etc...

**对不起我的英语。

0 个答案:

没有答案