如何从http请求中访问客户端socket id?

编程入门 行业动态 更新时间:2024-10-07 16:21:16

如何从http请求中访问<a href=https://www.elefans.com/category/jswz/34/1771403.html style=客户端socket id?"/>

如何从http请求中访问客户端socket id?

最近,我偶然发现了一个有趣的问题。

目标是通过web套接字在浏览器客户端和我的expressJs服务器之间创建一个通信,以快速显示在另一个客户端上所做的更改。同时我还使用标准的http连接与我的数据库进行通信。

问题是,我需要为每个用户生成一个单独的链接(基于他们的cookie,我已经创建了),但在服务器上只有最后一个是有效的。Please refresh the page.为了达到这个目的,我发出了事件 linkExpired 全局,将发送者的链接也标记为过期。

我不能访问客户端套接字(这将解决我的问题),因为我不想在建立连接后存储它们(如建议的那样)。此处 例如)。) 在我看来,这不是一个优雅的解决方案。

任何帮助都将被感激。

回答如下:

经过一段时间后,我想出了一个不同的方法,也许在建立连接后创建一个cookie存储客户端套接字的id就足够了。所以我就这么做了... 我意识到 socket.io 已经有一个包含socket id的cookie。

唯一要做的就是使用 cookie-parser 与快递。

const cookieParser = require('cookie-parser');
require('express')().use(cookieParser());

之后,我就可以访问所有http请求所传递的Cookies,这让我可以根据id过滤socket,避免向发送者发送事件。

const io = require("socket.io").io;
Object.keys(io.sockets.sockets).forEach((_socketId) => {
  if (req.cookies.io !== _socketId) {
    io.to(_socketId).emit('linkExpired');
  }
});

请注意我使用的片段。req.cookies.io 作为插座的id。我注意到 socket.io 正在使用名为 io 来存储客户端socket的当前id。

而在客户端,我可以实现如下显示到期的横幅。

import socketIOClient from "socket.io-client";
const io = socketIOClient(process.env.REACT_APP_URL);
io.on('linkExpired', () => {
  setLink('Refresh the page');
});

同时我还得记得把选项传给... fetch 方法来发送cookie。

fetch(`${process.env.REACT_APP_URL}/api/main`, {
  credentials: 'include'
});

我花了太多时间在这上面 所以我希望有人能从这个解释中受益。

更多推荐

如何从http请求中访问客户端socket id?

本文发布于:2024-05-13 11:56:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759503.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:客户端   http   id   socket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!