我有一个使用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。
非常感谢,
沙巴
答案 0 :(得分:1)
您是否阅读过https://github.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7? 它包含有关从0.6迁移到最新0.7
的大量信息