我基于nodejs,socket.io做了一个web版的即时通讯.发现几个问题,请大家帮忙解决一下.第一:每次连上以后,发不了几个消息就会自动断开,怎么办?有没有什么好的处理办法?第二:每次刷新页面的时候总是会更换socket.id(我目前是用这个ID做的客户端识别主键),有没有更好的方案?第三:想做长连接这种就满足了么?多谢大家的帮助.
nodejsWeb即时通讯socket.io

解决方案 »

  1.   

    以前写过一个,大致意思这样var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs')
    app.listen(8088);
    function handler(req, res) {}
    var sockets = {};
    io.sockets.on('connection', function (socket) {
    socket.on('ferret', function (fromUid, fn) {
    if(!sockets[fromUid]){
    sockets[fromUid] = this;
    }
    fn();
    });
    socket.on('message', function (data) {
    data = JSON.parse(data);
    if (sockets[data.toUid]) {
    sockets[data.toUid].emit('news', data);
    }
    });
    });//消息发送者
    var fromUid = 11;
    //消息接收者
    var toUid = 22;
    //创建实例
    var socket = io.connect('http://192.168.0.124:8088');
    //服务端有新消息推送
    socket.on('news', function (data) {
    //消息处理
    });
    //建立连接
    socket.on('connect', function () {
    socket.emit('ferret', fromUid, function () {
    socket.send(JSON.stringify({
    fromUid : fromUid,
    toUid : toUid,
    msg:'12121212'
    });
    }
    });
    });
      

  2.   


    你这个也没见有处理超时的问题的啊.我的是连接后,发送消息几次以后连接就断开了.只能刷新重新连接.服务器debug
    debug - fired close timeout for client
      

  3.   

    IE不支持WebSocket,IE用的是长连接,请求超时后会马上再发一个请求,重新连接。但是其它应该不会影响。
      

  4.   


    我刚发现的,如果不用socket发送消息没事儿,发了消息才会断开....
      

  5.   


    我刚发现的,如果不用socket发送消息没事儿,发了消息才会断开....
    后台代码呢
      

  6.   


    我刚发现的,如果不用socket发送消息没事儿,发了消息才会断开....
    汗,搞定了.客户端脚本错误引起的中断..