11.20 report--event client简要说明&修复由于build产生的一系列问题

event

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

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),监测是否有正常的回传,如果没有就进行定时拉起


build之后测试发现的一系列问题

  1. 首先就是之前说到的windows的open问题

  2. 由于vue build产生的不明原因的样式颜色错乱等一系列问题

目前已经解决


需要改进

  1. websocket增加在更改订阅信息后的unsub功能(断开socket并新建订阅
  2. 页面的美观需要优化
  3. widget的layout默认大小
  4. 完整的测试一遍

本文章使用limfx的vscode插件快速发布