aermin / ghChat

:octocat: 📱A chat application for GitHub. React + PWA + Node(koa2) + Typescripts + Mysql + Socket.io

Home Page:https://im.aermin.top/group_chat/ddbffd80-3663-11e9-a580-d119b23ef62e

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

客户端中InitApp/index.js为什么会被默认初始化并执行

zjc6666 opened this issue · comments

您好!因为现在正在学习您的代码,遇到了一些问题,想请教您一下。

  我在学习代码的过程中,在服务端跟index.js客户端进行socket通信方面遇到了问题,希望能够得到您的解答,问题就是没有理解为什么InitApp/index.js中的InitApp类中的init()函数会被默认执行,具体疑惑如下:
  在客户端的src/conpontent/PrivateChat/index.js中,在一个用户想要给另外一个用户发送信息时(例如A用户想要给B用户发送信息),A用户会通过src/conpontent/PrivateChat/index.js的51行的request.socketEmitAndGetResponse('sendPrivateMsg',data),先将要发送的信息以及B用户的信息发送到服务端,然后这个请求被服务端中server/src/app/socket/app.socket.ts接收(app.socket.ts的89行),服务端通过io.to(e).emit('getPrivateMsg', data);来将信息转发给B用户。
   在客户B的客户端中,接受服务端的socket的部分是客户端代码中的src/app/modules/InitApp/index.js的第65行,然后再通过Action和Reducer来更新客户端的网页信息。
   但是我疑惑的是为什么服务端能够直接和客户端B进行通信,因为我并没有发现InitApp/index.js这个文件被其他程序调用过。通过学习知道,InitApp中的socket部分都是为了跟服务端进行socket通信。也就是为什么InitApp/index.js这个文件会被默认执行。
   通过执行demo时候打印log,我发现只要成功登录进入主页面中,InitApp/index.js的构造函数就会被执行,这是否是一个什么机制,能够自动调用或者初始化这个InitApp对象?
   希望能够得到您的回答,谢谢!

1.为什么服务端能够直接和客户端B进行通信?
因为客户端B也跟服务端保持了websocket 链接
2:只要成功登录进入主页面中,InitApp/index.js的构造函数就会被执行,这是否是一个什么机制,能够自动调用或者初始化这个InitApp对象?
有在src/components/Tabs/index.js 这个组件的constructor中执行了initAppOnce,initAppOnce会去new InitApp的instance,然后执行InitApp module的init方法

非常感谢您的回复,明白了上面问的问题。这个在Tabs中执行InitApp的构造函数,是否可以把执行InitApp这个构造函数的过程,放到别的地方?例如MainView中。就是这个是否可以换到别的地方执行?

只要确定是在登录之后的页面就可以哦,要考虑登陆后的路由情况,比如是到/settings
,/welcome 或者某一具体聊天页面,反正就是不管登陆后跳转到哪个路由,保证它能被执行,且需要早一点被执行。

非常感谢您的回答,解答了我的疑惑,十分感谢!