orginone平台解析——SignalR通信
Storehub
关于 SignalR.HubConnection 的官方文档(不过官方貌似没有中文版的): https://learn.microsoft.com/zh-cn/javascript/api/@microsoft/signalr/hubconnection?view=signalr-js-latest
对 SignIR 还不是很熟悉,和传统的 axios 请求不太一样,之后再继续学习这一块
Storehub 功能是用来和服务器建立 SignIR 连接的
- constructor 构造方法:构造函数,用于建立与 SignalR 服务器的连接。主要是初始化了私有对象_connection,这是用来和 SignalR 服务器的连接的对象,后面的 invoke 就是通过这一方式和服务器连接的
- isConnected:检查是否连接
- dispose:销毁连接
- _starting:初次开始连接
- start:启动连接,如果没有启动,则调用_starting
- restart:重新建立连接,先停止连接,之后调用start
- onConnected:连接成功的回调函数,传入一个返回
void
的函数,用来在_starting 中执行 - onDisconnected:断开连接的回调,和成功连接的回调类似,在销毁连接时执行
- on:
- 接收两个参数一个是字符串(方法名),第二个是函数
- 这也是一个回调函数,官网上的解释是说注册一个处理程序,当调用具有指定方法名称的集线器方法时将调用该处理程序。我的理解是客户端去监听服务器,当服务器执行了第一个参数指定的方法时,就去执行后面的函数
- 例如:
当服务器执行了 updated 方法后,会将结果传入第二个参数所定义的函数,从而做到服务器去调用客户端的方法1
2
3this._storeHub.on('updated', (belongId, key, data) => {
this._updated(belongId, key, data);
});
- invoke:这是用来调用服务器的方法
- 接收的参数分为两个部分,第一个是调用的服务器端的方法,第二个是传入的参数
- 例如:在 kernelapi 中的登录方法:我在 invoke 中打印了请求的方法和对应的请求结果:
1
res = await this._storeHub.invoke('Login', req);
1
2
3
4
5
6
7this._connection
.invoke(methodName, ...args)
.then((res: ResultType<any>) => {
console.log(res); //打印请求结果
console.log(methodName); //打印请求方法
//其他的代码省略
})
anyStore
anyStore 功能主要是用来管理服务器的数据的,比如存储的文件,使用的连接方法是调用上面的 Storehub 对象
- _restRequest:使用 axios 请求后端,在 anyStore 的每一个方法下都会先判断一次,如果 StoreHub 没有连接上才会用 axios 请求,以下是 anyStore 涉及到的方法
- 对物的操作:创建、加载。物是平台中抽象的一个概念,把平台中所有的对象都抽象成物
- 对文件的操作:上传、查看
- 对 token 的操作:更新 token 到缓存中、获取 token
- 对对象的操作:查询、修改、删除
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lilming的编程方舟!
评论
ValineDisqus