rust的websocket库ws-rs 架构
ws-rs的开源库地址
架构
WebSocket需要两个基本组件:Factory和Handler。Factory是实现Factory trait的任何struct。 WS-RS已经为以Sender为第一个参数的闭包提供了Factory trait实现,因此可以将闭包作为Factory传递给任何一个调用函数。 每次成功建立基础TCP连接时,都将调用您的Factory,它将需要返回一个Handler来处理新的WebSocket连接。
Factories可用于管理应用于多个WebSocket连接的状态,而Handlers则管理单个连接的状态。 大多数情况下,闭包Factory已经足够使用了,您只需要专注于编写您的Handler。 您的Factory将被传递一个表示WebSocket output的Sender结构的参数。Sender允许Handler使用其发送Message、或通过发送关闭代码使WebSocket关闭握手,以及其他有用的操作。 如果需要从应用程序的其他地主发送消息,可以通过clone Sender跨线程基于websocket事件循环机制使用非阻塞发送消息。
与Factory一样,可以使用闭包用作简单的Handler。闭包必须接受仅一个Message参数,它可以捕获Factory中存在的变量。 例如,在listen and connect的入门示例中,闭包Factory返回另一个闭包作为新连接的handler。这个handler闭包捕获变量out,out是Sender,表示WebSocket的输出,这样它以后可以使用out发送消息。 闭包Handlers通常需要捕获具有所有权的变量,因为Factory可能被多次调用。将处理程序看作是在单独的线程上运行的,它们应该在Rust的内存模型中有意义。闭包处理程序必须返回Result<()>,以便在不发生panicking的情况下处理错误。
Sender的close和send方法,实际上返回一个Result<()> ,表明它们是否能够在EventLoop调度上请求command(close或send)。
很重要的一点是,你的Handler不要轻易地产生panic,因为一个handler程序的panic将断开该WebSocket的所有其他连接。你的Handler不要轻易panic,除非你希望所有的连接都立即失败。
