【发布时间】:2018-01-10 11:35:29
【问题描述】:
希望你能解决我的问题。
我在“app.js”文件中有这段代码
var express = require('express');
var app = express();
const stores = require('./routes/r_stores');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.io=io;
app.use('/stores',stores);
// update question
io.on('connection',function(socket){
console.log("IO APP CONNECTED ");
socket.on('disconnect',function(){
console.log("IO APP DISCONNECT ");
})
})
server.listen(3080, function () {
console.log('listening on port 3080');
});
在“r_stores.js”文件中
var express = require('express');
var router = express.Router();
var app = express();
router.get('/', function (req, res, next) {
req.app.io.on('connection', function(socket){
console.log("IO STORES CONNECTED");
socket.on('disconnect',function(){
console.log("IO STORES DISCONNECTED");
})
})
})
module.exports = router;
客户端刷新页面时的问题,Socket IO增加了一个用户的连接,当我发出一条消息时,它会按连接数发送给客户端。
刷新时,控制台显示这个
第一次刷新时
IO 应用已连接
已连接 IO 商店
在第二次刷新时
IO 应用已连接
已连接 IO 商店
已连接 IO 商店
第三次刷新
IO 应用已连接
已连接 IO 商店
已连接 IO 商店
已连接 IO 商店
【问题讨论】:
-
我认为客户端代码在启动/初始化时连接到 io 服务器,这会导致它在每次刷新时连接到 websocket
-
我在“app.js”中使用了socket io,即使多次刷新也能正常工作。
router.get ('/')和导出的问题.. 我的意思是模块。 -
为什么在路由器中初始化套接字。 Socket和Router不同 第一次调用get route方法时,第一次创建socket对象,再次调用时又创建了另一个对象,也就是说,当你调用两次路由时,它创建了两个socket对象。
标签: javascript node.js sockets socket.io