我正在构建一个使用快速路由和socket.io的节点js web应用程序来显示在线用户,聊天等。
如果我建立了socket.io连接并尝试导航到任何其他页面(通过快速路由),则客户端会挂起2分钟。
我尝试使用windows.location.href
在客户端级重定向但没有成功。在客户端上运行调试时,在2分钟到期之前,路由不会被调用。因此,在调用路由之前,延迟要么发生在客户端上,要么发生在Node / express中的某个地方。
我在单独的socket.js文件中设置函数,以便将所有套接字调用保存在一个位置,不确定这是否导致挂起。
以下是我的设置。
app.js
var express = require('express');
var path = require('path');
var port = process.env.PORT || '3000';
var socketio = require('./src/socket');
var http = require('http');
var app = express();
var server = http.createServer(app);
var users = require('./routes/users');
app.use('/users', users);
socketio(server);
module.exports = app;
users.js
var express = require('express');
var router = express.Router();
var path = require('path');
router.get('/register', function(req, res) {
res.render('register');
});
router.get('/login', function(req, res) {
res.render('login');
});
router.get('/profile', function(req, res) {
res.render('profile', {user:req.user, title:'Profile', layout:'profile'});
});
module.exports = router;
socket.js
var socketio = require('socket.io');
module.exports = initSockets;
function initSockets(server) {
var io = socketio.listen(server);
io.on('connection', function (socket) {
// connection code
});
});
client.js
var home = 'http://localhost:3000';
$(document).ready(function(){
var socket = io(home);
socket.on('auth', function(data){
// authentication code
});
});