Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在应用程序范围内保留Socket.io套接字_Node.js_Reactjs_Socket.io - Fatal编程技术网

Node.js 如何在应用程序范围内保留Socket.io套接字

Node.js 如何在应用程序范围内保留Socket.io套接字,node.js,reactjs,socket.io,Node.js,Reactjs,Socket.io,我正在尝试将socket.io功能添加到我的应用程序中 我以前从未使用过socket.io,所以我不知道如何从这里开始 到目前为止,我一直在使用MERN堆栈,下一步是为聊天功能实现socket.io。问题是,我不知道什么时候连接,以及如何保存我的套接字。用户可以登录,所以我想我可以在用户登录后连接,但是套接字是在组件中创建的,我不能从其他任何地方访问它 问题是,我使用JWT令牌进行身份验证,因此我有一个函数,在进入新页面时,如果令牌尚未过期,则该函数会“让用户登录” if(localStorag

我正在尝试将socket.io功能添加到我的应用程序中

我以前从未使用过socket.io,所以我不知道如何从这里开始

到目前为止,我一直在使用MERN堆栈,下一步是为聊天功能实现socket.io。问题是,我不知道什么时候连接,以及如何保存我的套接字。用户可以登录,所以我想我可以在用户登录后连接,但是套接字是在组件中创建的,我不能从其他任何地方访问它

问题是,我使用JWT令牌进行身份验证,因此我有一个函数,在进入新页面时,如果令牌尚未过期,则该函数会“让用户登录”

if(localStorage.jwtToken){
const token=localStorage.jwtToken;
setAuthToken(令牌);
const user=jwt_解码(令牌);
存储调度(操作_setCurrentUser(用户));
dispatch(setGroupsOfUser({id:user.id}));
const currentTime=Date.now()/1000;
if(user.exp
我以为我可以在这里连接,但是我的聊天视图组件无法访问它来发送消息和其他东西。我需要一个套接字来发送通知,即使用户不在聊天室,ChatView组件也需要它来发送消息

尝试在登录分派后连接,并将联机用户及其SocketID存储在服务器上


如果我尝试搜索解决方案,我得到的每一个结果都是关于使用socket.io进行身份验证,但是身份验证已经为我完成了,所以我不确定如何继续。

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

您可能需要查看redux。因为你有所有的授权资料。处理应用程序范围的身份验证可能会比较麻烦。

您是否尝试过在应用程序的顶层设置套接字?而不是在app.js之上,那么如何将用户分配到套接字?你是说在index.js中吗?对不起,我是说在应用程序,js级别?你的问题似乎只是把它设置在一个子组件上,对吗?是的,我的意思是,我的子组件中需要它。你认为如果我在app.js中连接,并通过路由将套接字传递给子组件,会起作用吗?是的,绝对会-你应该在根(app)级别设置套接字,使用dispatchers-你的子组件可以订阅,然后在进行任何更改后,它们将收到更新。。。