如何与Socket.io 1.0和Express
4.x共享会话?我使用Redis商店,但我认为这没有关系。我知道我必须使用中间件来查看cookie和获取会话,但是不知道如何。我搜索了但找不到任何工作
var RedisStore = connectRedis(expressSession);
var session = expressSession({
store: new RedisStore({
client: redisClient
}),
secret: mysecret,
saveUninitialized: true,
resave: true
});
app.use(session);
io.use(function(socket, next) {
var handshake = socket.handshake;
if (handshake.headers.cookie) {
var str = handshake.headers.cookie;
next();
} else {
next(new Error('Missing Cookies'));
}
});
解决方案非常简单。它只是没有很好的记录。也可以通过如下所示的小型适配器将快速会话中间件用作Socket.IO中间件:
sio.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
这是Express 4.x,Socket.IO 1.x和Redis的完整示例:
var express = require("express");
var Server = require("http").Server;
var session = require("express-session");
var RedisStore = require("connect-redis")(session);
var app = express();
var server = Server(app);
var sio = require("socket.io")(server);
var sessionMiddleware = session({
store: new RedisStore({}), // XXX redis server config
secret: "keyboard cat",
});
sio.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res || {}, next);
});
app.use(sessionMiddleware);
app.get("/", function(req, res){
req.session // Session object in a normal request
});
sio.sockets.on("connection", function(socket) {
socket.request.session // Now it's available from Socket.IO sockets too! Win!
});
server.listen(8080);
我搜索了一下,只能找到这个关于socket.io0.9的wiki页面。 最终,我找到了engine.io-client的文档(socket.io-client基于1.x分支)。这是我写的代码,似乎正在工作。但是,我想知道这是正确的还是我做错了什么: 奇怪的是,仅仅将属性设置为仅具有的数组是不够的;我还必须禁用。这是正确的吗? 我有了一些新发现。 当仅设置为时,是否启用并没有什么区别。这正常吗?
在这个 Matplotlib 数据可视化教程中,我们将讨论sharex选项,它允许我们在图表之间共享x轴。将sharex看做『复制 x』也许更好。 在我们开始之前,首先我们要做些修剪并在另一个轴上设置最大刻度数,如下所示: ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=7, prune='upper')) 以及 ax3.yaxis.se
我刚开始在Node.js应用程序中学习Express4.0,我发现它生成了文件,在该文件上只编写了应用服务器和端口设置,其他所有东西(如中间件和路由)都在文件中定义。 但是,我不确定这个是做什么的。我使用过Express3.x,并且始终在相同的文件上定义服务器和端口设置以及路由和中间件,并使用启动我的node应用程序。那么使用有什么意义呢?它是否只是将服务器和端口定义与其他分开? 现在,当我使用e
场景:在使用nuxtjs 服务器渲染的时候接口数据都是asyncData进行请求的,之前用户在页面输入了一些数据等,前端这边都是缓存到localStorage 页面刷新的时候还可以拿到,现在的问题:页面刷新的时候客户端操作的数据如何实现服务器数据共享呢? 有什么好的思路吗?我想到过用cookie?但是太小了不能满足我的需求
我在Vert发展。x(基于Netty和Hazelcast),我正在尝试在两个服务器实例之间共享数据(在同一局域网上的不同机器中的每个实例)。 我的问题是我不知道如何配置vert. x服务器以允许它们共享它们的并发内存映射(理论上说这是可能的)。 我已经阅读了Vert. x和Hazelcast的许多文档,但还没有结果。(我不知道如何强制vert. x加载hazelcast xml配置文件)。 提前感
我需要在 Eclipse 中设置 Tomcat 8.5.x 服务器版本。当我尝试使用Eclipse GUI创建服务器时,我会选择Eclipse Luna作为最新版本“Apache Tomcat v8.0”的选择。当我选择它并浏览到我的Tomcat 8.5.x服务器时,我收到以下阻止错误消息: 此目录下的Apache Tomcat安装版本为8.5.0。预计会安装Tomcat 8.0。 尝试 TomE