如何在socket io中进行在线和离线操作?我是否需要redis来存储会话或mongodb?
我的尝试 服务器端
var fccDataUrl = 'https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json';
var dataset;
var fccData;
$.getJSON(fccDataUrl, (myData) => {
dataset = myData.data;
fccData = myData;
console.log('dataset', dataset)
console.log('fccData', fccData)
var w = '800'
var h = '500'
var padding = 50;
var svg = d3.select('body')
.append('svg')
.attr('width', w)
.attr('height', h)
var xScale = d3.scale.linear()
.domain([1947, 2015])
.range([padding, w - padding])
var yScale = d3.scale.linear()
.domain([0, d3.max(dataset, d => d[1])])
.range([h - padding, padding])
var xAxis = d3.svg.axis()
.scale(xScale)
.orient('bottom')
.ticks(10)
var yAxis = d3.svg.axis()
.scale(yScale)
.orient('left')
.ticks(10)
svg.selectAll('rect')
.data(dataset)
.enter()
.append('rect')
.classed('bars', true)
.attr('x', (d, i) => i * (w / dataset.length) + 50)
.attr('y', d => yScale(d[1]) - 50)
.style('width', '4px')
.style('height', d => h - yScale(d[1]))
svg.append('g')
.attr('class', 'axis')
.attr('transform', `translate(0, ${h - padding})`)
.call(xAxis)
svg.append('g')
.attr('class', 'axis')
.attr('transform', `translate(${padding}, 0)`)
.call(yAxis)
});
客户机侧
io.on('connection', function(socket) {
socket.emit('connected', 'Online');
socket.disconnect('disconnect', function() {
socket.emit('connected', 'offline');
});
})
上面的代码不一致,有时它显示离线,有时它不是
答案 0 :(得分:0)
套接字断开时侦听的正确方法是:
socket.on('disconnect', function () {
......
});
你无法在回调中发出这个套接字。
对于一个确切的答案,我需要知道你如何断开连接(服务器或客户端)以及谁应该收到信息,他自己或其他客户?