Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zjc6666 opened this issue Sep 7, 2020 · 4 comments
Open

Comments

@zjc6666
Copy link

zjc6666 commented Sep 7, 2020

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

  我在学习代码的过程中,在服务端跟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对象?
   希望能够得到您的回答,谢谢!
@aermin
Copy link
Owner

aermin commented Sep 7, 2020

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

@zjc6666
Copy link
Author

zjc6666 commented Sep 7, 2020

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

@aermin
Copy link
Owner

aermin commented Sep 7, 2020

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

@zjc6666
Copy link
Author

zjc6666 commented Sep 7, 2020

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants