socket.io 连接不一致
socket.io is not consistently connecting
我刚刚将 socket.io 添加到我的 MEAN 堆栈应用程序。它的连接不一致。这是我启动服务器并通过浏览器连接时得到的结果:
GET /socket.io/?EIO=3&transport=polling&t=LTnYzIi 200 1.948 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnYzJL 404 1.617 ms - 66
GET /socket.io/?EIO=3&transport=polling&t=LTnYzrU 200 1.612 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnYzs6 404 1.974 ms - 66
GET /socket.io/?EIO=3&transport=polling&t=LTnY-jT 200 1.652 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnY-kE 404 0.975 ms - 66
但是,如果我停止服务器并在浏览器发出请求(在后台)时重新启动它,客户端会连接并且工作正常。每次有通信它真的必须连接对吗?请告诉我我缺少什么。
这是我的 package.json socket.io 电话:
"socket.io": "^1.4.6"
我的 app.js 看起来像这样:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator')
var mongodb = require('mongodb');
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/newphase1");
var async = require('async');
var config = require('./config.js');
var routes = require('./routes/index');
var api = require('./routes/api');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(favicon(__dirname + '/public/favicon(4).png'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, '/public')));
app.use(expressValidator({
errorFormatter: function(param, msg, value){
var namespace = param.split('.'),
root = namespace.shift(),
formParam = root;
while(namespace.length){
formParam += '[' + namespace.shift() + ']';
}
return {
param: formParam,
msg:msg,
value:value
};
}
}));
var api = require('./routes/api')(app,express,io);
app.use('/api', api);
app.get('*',function(req,res){
res.sendFile(__dirname + '/public/views/index.html');
});
io.on('connection', function(socket) {
console.log('client connected!');
});
http.listen(config.port,"127.0.0.1",function(err){
if(err){
console.log(err);
}else{
console.log('listening on port 3000');
}
})
我的 socket.io 脚本文件(来自 CDN)在我的 index.js(angular):
<script src="https://cdn.socket.io/socket.io-1.4.6.js"></script>
我为 socket.io 服务:
.factory('socketio',function($rootScope){
var socket = io.connect("http://localhost: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);
}
});
});
}
}
});
它确实连接了,但不是始终如一。有任何想法吗?
出于某种原因
npm start
给我上面的不一致而
node app.js
工作正常。
我刚刚将 socket.io 添加到我的 MEAN 堆栈应用程序。它的连接不一致。这是我启动服务器并通过浏览器连接时得到的结果:
GET /socket.io/?EIO=3&transport=polling&t=LTnYzIi 200 1.948 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnYzJL 404 1.617 ms - 66
GET /socket.io/?EIO=3&transport=polling&t=LTnYzrU 200 1.612 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnYzs6 404 1.974 ms - 66
GET /socket.io/?EIO=3&transport=polling&t=LTnY-jT 200 1.652 ms - 3956
POST /socket.io/?EIO=3&transport=polling&t=LTnY-kE 404 0.975 ms - 66
但是,如果我停止服务器并在浏览器发出请求(在后台)时重新启动它,客户端会连接并且工作正常。每次有通信它真的必须连接对吗?请告诉我我缺少什么。
这是我的 package.json socket.io 电话:
"socket.io": "^1.4.6"
我的 app.js 看起来像这样:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator')
var mongodb = require('mongodb');
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/newphase1");
var async = require('async');
var config = require('./config.js');
var routes = require('./routes/index');
var api = require('./routes/api');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(favicon(__dirname + '/public/favicon(4).png'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, '/public')));
app.use(expressValidator({
errorFormatter: function(param, msg, value){
var namespace = param.split('.'),
root = namespace.shift(),
formParam = root;
while(namespace.length){
formParam += '[' + namespace.shift() + ']';
}
return {
param: formParam,
msg:msg,
value:value
};
}
}));
var api = require('./routes/api')(app,express,io);
app.use('/api', api);
app.get('*',function(req,res){
res.sendFile(__dirname + '/public/views/index.html');
});
io.on('connection', function(socket) {
console.log('client connected!');
});
http.listen(config.port,"127.0.0.1",function(err){
if(err){
console.log(err);
}else{
console.log('listening on port 3000');
}
})
我的 socket.io 脚本文件(来自 CDN)在我的 index.js(angular):
<script src="https://cdn.socket.io/socket.io-1.4.6.js"></script>
我为 socket.io 服务:
.factory('socketio',function($rootScope){
var socket = io.connect("http://localhost: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);
}
});
});
}
}
});
它确实连接了,但不是始终如一。有任何想法吗?
出于某种原因
npm start
给我上面的不一致而
node app.js
工作正常。