rust的websocket庫ws rs 架構

2021-10-01 13:24:48 字數 1111 閱讀 8486

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,除非你希望所有的連線都立即失敗。

Rust 效能測試criterion庫

在量化領域,對效能要求比較高,特別是高頻交易,那是納秒必爭。在rust中,測試乙個函式,或乙個操作耗時即效能分析,應是如何做呢?一 計時器 systime 是否可以用std time systime 來計算花時情況?我們來試一試 use std time systemtime pub struct ...

Rust 連線 PostgreSQL 資料庫

這次,我們使用postgres這個 crate 來連線和操作 postgresql 資料庫。建立好專案後,在 cargo.toml 裡新增 postgres 的依賴 再建立 create db 函式,用來建立資料庫和表,它返回乙個 result,裡面可能是 client 或錯誤 注意,client ...

rust的綠卡 rust中的Pin詳解

rust中的pin詳解 相關概念 pin這是乙個struct,作用就是將p所指向的t在記憶體中固定住,不能移動。說白一些,就是不能通過safe 拿到 mut t。pin定義如下 pub struct pin pointer p,unpin 這是乙個trait,定義在std marker中,如果乙個t...