node.js - 如何在应用程序范围内保留 Socket.io 套接字
问题描述
我正在尝试将 socket.io 功能添加到我的应用程序中。
我以前从未使用过socket.io,所以我不知道如何从这里取得进展。
到目前为止,我一直在使用 MERN 堆栈,下一步是实现 socket.io 以实现聊天功能。问题是,我不知道何时连接,以及如何保留我的套接字。用户可以登录,所以我认为我可以在用户登录后进行连接,但是套接字是在组件中创建的,我无法从其他任何地方访问它。
问题是,我使用 JWT 令牌进行身份验证,所以我有一个功能,如果令牌尚未过期,则在转到新页面时“登录用户”。
if(localStorage.jwtToken){
const token = localStorage.jwtToken;
setAuthToken(token);
const user = jwt_decode(token);
store.dispatch(action_setCurrentUser(user));
store.dispatch(setGroupsOfUser({ id: user.id }));
const currentTime = Date.now() / 1000;
if(user.exp < currentTime){
store.dispatch(logoutUser());
window.location.href = './login';
}
}
我以为我可以在这里连接,但是我的 ChatView 组件无法访问它来发送消息和东西。我需要一个套接字来发送通知,即使用户不在聊天室中,ChatView 组件也需要它来发送消息。
在登录调度后尝试连接,并将在线用户及其socketID存储在服务器上。
如果我尝试寻找解决方案,我得到的每一次点击都是关于使用 socket.io 的身份验证,但身份验证已经为我完成,所以我不知道如何继续。
解决方案
正如建议的那样,我决定在我的 App.js 中创建套接字并将其存储在我的状态中。我可以在我的子组件中使用这个存储的状态,并在登录后将它分配给服务器上的用户。
推荐阅读
- c++ - 创建变量错误时的 SDL2 分段错误
- python - 编译后 Tkinter 和 Flask 集成不起作用
- c# - 在 Swagger 和控制台中打开 net core web api
- amazon-web-services - 使用 AWS Amplify 和 AWS Cognito 进行数据特定授权
- c# - localhost 当前无法处理此请求。HTTP 错误 500 - 对于 asp.Net Core
- flutter - 如何在颤动中以正确的顺序设置widgetSpan中文本之间的数字
- node.js - 语法错误节点JS
- python - 即使条件为假,循环也会在内部继续运行代码
- sql - SQL 与数组内的过滤器重叠
- javascript - 三个 js 上的异步等待。GLTFloader 不工作