後臺開發小白必學伺服器框架——UDPServer

来源:https://www.cnblogs.com/htkfsy/archive/2019/11/20/11853441.html
-Advertisement-
Play Games

畢業後加入了一家大型的互聯網公司的音視頻產品部門做後臺開發,其實我本身是學習自動化的,研究生的方向嵌入式系統,對互聯網可是一知半解,因此能進入這樣一個大公司還是很幸運的。 剛開始工作的半年應該是在上份工作最快樂的時光,那時候我們十來個人被抽調出來做好友系統,由Z組長負責。從產品到開發,大部分都是新入 ...


畢業後加入了一家大型的互聯網公司的音視頻產品部門做後臺開發,其實我本身是學習自動化的,研究生的方向嵌入式系統,對互聯網可是一知半解,因此能進入這樣一個大公司還是很幸運的。

剛開始工作的半年應該是在上份工作最快樂的時光,那時候我們十來個人被抽調出來做好友系統,由Z組長負責。從產品到開發,大部分都是新入職員工,pm給畫了一個大餅,大家都滿懷憧憬。閑話少說,先介紹一下剛開始接觸後臺開發用到的伺服器框架。

第一個接觸的叫udpserver。顧名思義,就是只支持udp的服務框架。因為我們部門是做音視頻產品的,音視頻數據對實時性要求很高,因此常用udp傳輸數據。Udp server是同步多進程模型,包含1個Interface進程和多個Worker進程。


 

Iterface進程負責接收來自外部的請求,做一些合法性校驗和格式轉換後,轉發給後端的Worker進程。Worker進程監聽不同的埠收包,並處理業務邏輯。Worker進程的回包直接發給客戶端。

此處有幾個點值得關註:

首先,Worker進程監聽的是不同埠。

監聽相同的埠顯然是更常見的做法,而監聽相同的埠也需要註意一點,即監聽的埠socket必須是從父進程中繼承得到的,而非Worker自己創建的socket。因為對於前者內核才能保證調度的均勻性,而後者是沒有這種效果的,內核只會把請求包扔給同一個Worker。

這裡之所以使用監聽不同埠的方案,是為了保證調度的可控性,請求包發往哪個Worker是有預期的,可以做更個性化的調度策略,問題定位也方便得多。Udp server預設是使用輪詢的調度方式。

第二點是,Worker進程回包是直接返回給客戶端的。

另一種常見做法是通過Interface進程回包,缺點是Interface會成為瓶頸。而Worker直接回包的缺點是向外部暴露Worker,不過這個問題並不十分嚴重。相較之下,我們更希望獲得性能的提升。為了給客戶端回包,Interface會把客戶端的ip和埠封裝到請求包發給Worker。

框架雖簡單,但是性能非常優異,作為echosvr性能可達30w+ QPS。但是這個框架不支持TCP,因此只能作為內部的服務框架使用。

因為很久沒用這個框架了,以上所述可能有不准確或者不充分的地方,望不吝賜教。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現實的場景中很經常遇到表格el-table數據過多,為了更好的用戶體驗,所以我們需要用到分頁,一般分頁可以視數據量的大小可分為前端控制和後端控制。 先看下效果(已做脫敏處理) 圖1 前端el-table分頁效果 這裡就把ElementUi官方的例子進行修改來說明 <template> <el-tab ...
  • 1.position的值, relative和absolute分別是相對於誰進行定位的? § absolute :生成絕對定位的元素, 相對於最近一級的 定位不是 static 的父元素來進行定位。 § fixed (老IE不支持)生成絕對定位的元素,通常相對於瀏覽器視窗或 frame 進行定位。 ...
  • * ++ -- 都是運算符 * ++ 和 -- 可以分為:前+ 和後+ and 前- 和後- * 如果++在後面:如: num++ +10參與運算 * 先參與運算,運算結束後自身再加1 * 如果++在前面:如: ++num+10參與運算 * 先自身加1,然後再參與運算 * Ctrl+/可以把選中的代 ...
  • 為了加強項目的介面安全程度,需求如下 1 var options = { 2 // 前端需要傳送的數據加密 3 data: { 4 abc: 123, 5 bcd: 123, 6 cds: '撒旦教付貨款12313', 7 }, 8 // 模擬後端返回base64碼 9 key: 'NWxCZUZ3 ...
  • 獲取兩個數字中的最大值 用if-else語句 var num1 = 10; var num2 = 100; if (num1 > num2) { console.log(num1); } else { console.log(num2); } 兩個分支,最終的結果是兩個分支中的一個,像這種情況可以使 ...
  • 一、頁面佈局 ​ 預設九宮格圖 九宮格占點陣圖 HTML頁面代碼: 二、頁面樣式 九宮格佈局相關CSS頁面樣式: 三、代碼邏輯 Luck幸運抽獎函數方法: 獎品列表DOM拼接: javascript / 獎品列表排序 / let sortList = function(data, el) { var ...
  • 開始學些Html的時候主要進行一些簡單的靜態網頁的處理: 1、HTML 標題 HTML 標題(Heading)是通過 h1-h6 加中括弧<>等標簽進行定義的。 2、HTML 段落 HTML 段落是通過 標簽進行定義的。 3、HTML 鏈接 HTML 鏈接是通過《a》標簽進行定義的。 4、HTML ...
  • 上篇介紹了一個簡單的UDP服務框架,但是面對海量的請求,同步框架顯然有點力不從心。於是在我接手好友系統的介面服務的時候,就採用了一個強大的非同步框架——MCP框架。 MCP框架是一個多進程非同步框架,支持UDP、TCP和http,結構很靈活,可以根據需要將各組件像搭積木一樣組裝。下麵是MCP最基礎的進程 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...