<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 前言 ws這個文件夾下,主要是起了一個ws的服務。處理上課過程中各個客戶端產生的信令。 [白板server信令處理流程](https://www.processon.com/view/link/5d22f70ee4b0f42d067b3d86) ## 建立連接 - 實例化WebSocket,監聽connnection事件 - 在connection監聽器中,創建一個`user`,監聽每一個連接的message事件。可以認為每個連接都是一個用戶。 - 根據每一個connection攜帶的參數,為`user`分組 ## 用戶分組邏輯 客戶端向服務端建立連接是攜帶的參數: - `identity` 用戶身份 - `userId` 用戶ID - `lessonId` 課件ID,用于請求PPT信息 - `periodId` 教室ID - `partId` 用于api請求,ws服務本身不關心 - `hash` 客戶端生成的隨機標識 根據用戶的periodId創建lesson,可以看做一個教室,多個lesson以peridId為key保存在channelMap中,lesson的主要內容為: - users:保存當前連接的用戶 - lessonId:當前課堂內使用的PPT的Id - pptRescorder:PPT的管理器 - hashMap:用于保存課堂內產生的所有消息的hash值 ### PPTRecorder 如果`partId`、`lessonId`、`periodId`都相同的連接,共享一個PPTRecorder。 初始化時,根據`partId`、`lessonId`、`periodId`生成一個`infoKey`,同時取當前時間`startTime`作為實例初始化時間,將`{key: infoKey, value: startTime}`存入redis,如果key已存在就更新`startTime`。 `PPTRecorder `主要負責記錄上課過程中產生的信令,并且當用戶中途加入課堂是一次性返回已經產生的信令。 關于**保存信令**,在上課過程中,`recorder`通過`startTime`生成`recordKey`,將接收到的信令儲存到redis;上課中途收到`keyframe`類型的消息,將當前記錄的信令全部發送到客戶端;上課結束,將redis中記錄的信令持久化到數據庫。 ## 處理信令消息 - ws心跳 - WsMessage - Cmd & Signal ### Cmd & Signal 這類信息是普通的JSON字符串,其中Cmd用戶控制課程開始結束,Signal則是客戶端發送。 **課程開始**: 創建PPTRecorder實例,記錄開始時間,記錄信令。 **課程結束**: 記錄結束時間,將redis中的信令持久化。 ### WsMessage - `keyframe`: 將當前的信令歷史發送給消息來源客戶端(單播) - `broadcast`/`media`/`animation`/`extra`/`template`: 將信令儲存到redis中,同時組播類課堂內的其他用戶(不包括自己) - `startTime`: 將服務器時間發送給消息來源客戶端(單播) - `syncMedia`: 組播
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看