如何在socket.io中进行在线和离线操作?

时间:2016-01-27 14:47:51

标签: node.js sockets socket.io

如何在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');
  });

})

上面的代码不一致,有时它显示离线,有时它不是

1 个答案:

答案 0 :(得分:0)

套接字断开时侦听的正确方法是:

socket.on('disconnect', function () {
......
});

你无法在回调中发出这个套接字。

对于一个确切的答案,我需要知道你如何断开连接(服务器或客户端)以及谁应该收到信息,他自己或其他客户?