Architecture 共享事件总线btw客户端应用程序和服务器参与者
将事件直接从客户端推送到服务器端垂直站点有哪些优点/缺点?换句话说,在客户端应用程序和服务器参与者之间共享事件总线有什么好处Architecture 共享事件总线btw客户端应用程序和服务器参与者,architecture,client-server,communication,actor,vert.x,Architecture,Client Server,Communication,Actor,Vert.x,将事件直接从客户端推送到服务器端垂直站点有哪些优点/缺点?换句话说,在客户端应用程序和服务器参与者之间共享事件总线有什么好处 正如您所知,有一个事件循环促使您使用类似smth的参与者模型。独立的参与者(垂直者)可以在计算机的帮助下相互交流 通用方法 好的,安排客户机-服务器通信的常见方法是使用下一种方案: 公开将接受客户端请求的web服务(路由器) Web服务向verticle/actor发送事件 Verticle/actor进行计算并返回结果 Web服务获取计算结果并将其发送回客户端 Ver
正如您所知,有一个事件循环促使您使用类似smth的参与者模型。独立的参与者(垂直者)可以在计算机的帮助下相互交流 通用方法 好的,安排客户机-服务器通信的常见方法是使用下一种方案:
const eb=new EventBus('http://localhost:8080/eventbus)
eb.send('some-address',{name:'tim',年龄:587})代码>
eb.registerHandler('some-address',(错误,消息)=>{…})
首先,这取决于——一如既往。异步和非阻塞通信更为重要。呼叫方未被阻塞,通信松散耦合。使用事件总线,您还可以从发布/订阅通信(和其他消息传递模式)中获益。V.Vernon提供了一本关于反应式消息传递模式和参与者模型的好书 关于安全问题,你只会。Vert.x调用这些。这样,您就不需要“保护”每个垂直站点,因为客户端无法直接访问它们 如果您有“实时”用例,即需要在不按重新加载的情况下尽快通知客户端,那么我将使用事件总线通信(例如聊天等)。但谁说你只能做一件事?您可以通过事件总线通知重要的更改(没有数据),并让客户端通过简单的web服务端点检索更改的数据 关于Actor模型的更多见解,我建议阅读《七个并发模型七周》一书 编辑普通WebSocket与事件总线桥: Vert.xWeb附带了一个。它将Web客户端与Vert.x事件总线集成。SockJS甚至可以通过长轮询等技术在旧浏览器中实现类似WebSocket的通信: UndertheHood SockJS首先尝试使用原生WebSocket。如果 它可以使用各种特定于浏览器的传输协议和 通过类似WebSocket的抽象呈现它们 Vert.x声明如下: 像WebSocket一样的界面,可以正常工作
因此,基本上Vert.x事件总线桥使用WebSocket(如果它在客户端浏览器中可用)。因此,我更喜欢事件总线桥而不是自己的WebSocket实现。编辑了我的答案。我建议对所有非notify的东西使用普通HTTP调用,对“实时”的东西使用事件总线桥。类似的框架,如SockJS和。更准确地说:我不是说WebSocket和桥不是互斥的。我的意思是,普通HTTP调用和网桥/WebSocket并不是相互排斥的。我不想说我更喜欢它,但我喜欢RESTAPI,因为它们即使在带有
cURL
等工具的终端中也很容易使用。正如我所说的,这取决于用例。请求/响应上类似事件的东西不会很好地工作,因此您需要消息传递WebSocket或事件总线。使用消息传递,您可以使用推送原则,使用请求/响应,您可以使用拉送原则。但是,您可以通过消息传递通知。如果客户机真的想要获取新数据,只需向REST端点发送一个普通的旧HTTP请求并获取数据。在少数事件和大量数据的情况下,这种方法更可取。如果有多个事件但数据很少,请将数据包含在事件中。