socket.io从0.6升级到0.7会导致socket.request出现问题

时间:2011-07-25 10:21:50

标签: javascript cookies node.js http-headers socket.io

我有一个使用node.js和socket.io的应用程序。它在三个月前工作正常,但是当我试图运行它时,它向我显示模块socket.io未定义(不知道为什么?)。所以我使用npm install socket.io再次安装它。原来,socket.io新版本发布了一组不同的功能(或者至少是它的使用方式)。我修正了变化,但仍有一些问题。这是我的工作:

服务器

    var http = require('http');
    ...
    var server = http.createServer ( function (request,response){
            console.log("Client request: " + request.url);
            ...
    });

    server.listen(port);

    var socketOptions = {
            transportOptions: {
                    'xhr-polling': {
                            closeTimeout: 12000000, //20 mins
                            timeout: 1200000  //20 mins
                    }
            }
    }

    var io = require('socket.io').listen(server,socketOptions);

    io.sockets.on("connection", function(socket) {
            console.log("WebSocket client connected");

            if (!socket.request) { // xhr polling => get cookie using websocket message
                    socket.json.send(JSON.stringify({
                            message: "resendcookie",
                            why: "Missing cookie",
                    }));
            } else {
                    console.dir(socket.request.headers.cookie);

                    ... <use the cookie> ...

            }

            io.sockets.on ("message", function(data) {
                    ...
            });

            io.sockets.on("close", function(){
                    ...
            });

            io.sockets.on("disconnect", function(){
                    ...
            });
    });

客户端:

    var socket = io.connect("localhost:port", {
            rememberTransport   :  false,
            transportOptions    : {
                    "xhr-polling": {
                            closeTimeout: 600000,
                            duration: 600000
                    }
            }
    });

    ...

    function onload() {
            ...

            socket.on("connect", function(){
                    ...
            }

            socket.on("mesasge", function(data) {

                    var m =JSON.parse(data);
                    if (m.message === "resendcookie"){
                            socket.send(JSON.stringify({
                                    cookie: document.cookie,
                            }));
                    }
            });
    }  

这是一个稍微修改过的代码,用于解决socket.io 0.6正常工作以包含连接和监听websocket的新方法。我的问题是:

如果使用chrome,socket.request曾经存在,因为它允许使用websockets,我可以直接访问cookie(xhr-polling技巧我用来访问不支持websockets的其他浏览器中的cookie)。 现在socket.request即使使用chrome也会给出不同的结果,而我找不到cookie 。我忘了修改其他任何东西吗?如果没有,请告诉我如何获取cookie。

非常感谢,

沙巴

1 个答案:

答案 0 :(得分:1)

您是否阅读过https://github.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7? 它包含有关从0.6迁移到最新0.7

的大量信息