event采用经典的发布订阅模式(Pub-Sub Pattern),其目的原先是用于性能测试,现为(本地)不同的thing之间,不同host之间(远程)以及前后端之间(远程)的socket通讯。
订阅方: 订阅方可以是thing也可以是event client,订阅方通过subscribe订阅用uri表示的事件
事件发布: 发布应该写在任意需要发布的地方,由thing来进行事件的发布,发布方不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在,需要在filter中过滤所有发布者传入的消息并相应地分发它们给订阅者。
订阅:
MyHub.EventHub.Subscribe(new EventFilter(@".*","changed"),handler);
想要订阅事件有两个个主要的程序,一个是事件过滤器,一个是订阅触发成功后调用的handler函数,其中事件过滤器有两个参数,分别为正则匹配表达式表达的路径和事件类型(默认值为Changed)
在订阅的同时,也会拿到sub的token,token用于退订。
发布:
MyHub.EventHub.Publish(path, "changed", 1);
Publish方法包括3个参数,分别是资源路径,event类型和负载payload
event client主要是在前端用ts编写的websocket服务。主要目的是通过订阅事件代替之前不断下拉的动态更新方式,达到节省资源提升性能和稳定性的效果
client第一步是建立websocket的连接,然后像服务端发送订阅信息,发送的订阅信息应该满足subscribe远程订阅的格式
如下:

subscribe包含两个参数,分别是EventFilter和handler,handler可以自己定义一下,EventFilter的组成有数据类型为list的SourceAndTypes,组成为:

其中又包含Source和EventType;
所以event client发送的数据应该类似于
"{'SourcesAndTypes':[{'Source':'.*','EventType':'Changed'}],'action':0}"
第三步就是响应回传,在服务端publish之后,拿到数据进行解析;
除此之外,发现在响应时间过长数据格式不对以及服务器意外关闭的情况下,会导致websocket断开等不稳定因素
所以,event client还包括了websocket的心跳保活机制和定时拉起的功能
心跳保活的主要机制是,定时向服务器发送测试信息(hearbeat),监测是否有正常的回传,如果没有就进行定时拉起
首先就是之前说到的windows的open问题
由于vue build产生的不明原因的样式颜色错乱等一系列问题
目前已经解决
本文章使用limfx的vscode插件快速发布