首页 > 解决方案 > 如何在应用程序范围内保留 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 的身份验证,但身份验证已经为我完成,所以我不知道如何继续。

标签: node.jsreactjssocket.io

解决方案


正如建议的那样,我决定在我的 App.js 中创建套接字并将其存储在我的状态中。我可以在我的子组件中使用这个存储的状态,并在登录后将它分配给服务器上的用户。


推荐阅读