我在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...
**对不起我的英语。