rust的websocket库ws-rs 架构
ws-rs的开源库地址https://github.com/housleyjk/ws-rs架构WebSocket需要两个基本组件:Factory和Handler。Factory是实现Factory trait的任何struct。WS-RS已经为以Sender为第一个参数的闭包提供了Factory trait实现,因此可以将闭包作为Factory传递给任何一个调用函数。每次成功...
ws-rs的开源库地址https://github.com/housleyjk/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,除非你希望所有的连接都立即失败。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)