<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          支持分布式的 go 實(shí)現(xiàn)即時(shí)通訊系統(tǒng)

          共 1597字,需瀏覽 4分鐘

           ·

          2021-10-20 14:37


          本文介紹了一個(gè) go 語言實(shí)現(xiàn)的簡(jiǎn)單 im 即時(shí)通信系統(tǒng)。

          簡(jiǎn)介

          純go實(shí)現(xiàn)的im即時(shí)通訊系統(tǒng),各層可單獨(dú)部署,之間通過rpc通訊,支持集群,github地址 https://github.com/Terry-Ye/im_api , 學(xué)習(xí)于goim, 總分三層,

          1. comet(用戶連接層),可以直接部署多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)保證serverId 唯一,在配置文件comet.toml
          2. logic(業(yè)務(wù)邏輯層),無狀態(tài),各層通過rpc通訊,容易擴(kuò)展,支持http接口來接收消息
          3. job(任務(wù)推送層)通過redsi 訂閱發(fā)布功能進(jìn)行推送到comet層。

          系統(tǒng)架構(gòu)圖

          時(shí)序圖

          以下Comet 層,Logic 層,Job層都可以靈活擴(kuò)展機(jī)器

          特性

          1. 分布式,可拓?fù)涞募軜?gòu)
          2. 支持單個(gè),房間推送
          3. 心跳支持(gorilla/websocket內(nèi)置)
          4. 基于redis 做消息推送
          5. 輕量級(jí)
          6. 持續(xù)迭代...

          部署

          1. 安裝
          go?get?-u?github.com/Terry-Ye/im
          mv?$GOPATH/src/github.com/Terry-Ye/im?$GOPATH/src/im
          cd?$GOPATH/src/im
          go?get?./...

          golang.org 包拉不下來的情況,例

          package?golang.org/x/net/ipv4:?unrecognized?import?path?"golang.org/x/net/ipv4"?(https?fetch:?Get?https://golang.org/x/net/ipv4?go-get=1:?dial?tcp?216.239.37.1:443:?i/o?timeout)

          從github 拉下來,再移動(dòng)位置

          git?clone?https://github.com/golang/net.git
          mkdir?-p?golang.org/x/

          mv?net?$GOPATH/src/golang.org/x/
          1. 部署im

          安裝comet、logic、job模塊

          cd?$GOPATH/src/im/comet
          go?install
          cd?../logic/
          go?install
          cd?../job
          go?install

          nohup?$GOPATH/bin/logic?-d?$GOPATH/src/im/logic/?2>&1?>?/data/log/im/logic.log?&

          nohup?$GOPATH/bin/comet?-d?$GOPATH/src/im/comet/?2>&1?>?/data/log/im/comet.log?&

          nohup?$GOPATH/bin/job?-d?$GOPATH/src/im/job/?2>&1?>?/data/log/im/job.log?&
          1. im_api 是im系統(tǒng)中使用的接口,需要像demo那樣整體跑起來需要完整的部署

          部署注意事項(xiàng)

          1. 部署服務(wù)器注意防火墻是否開放對(duì)應(yīng)的端口(本地不需要,具體需要的端口在各層的配置文件)

          demo

          聊天室:http://www.texixi.com:1999/

          使用的包

          • log: github.com/sirupsen/logrus
          • rpc: github.com/smallnest/rpcx
          • websocket: github.com/gorilla/websocket
          • 配置文件:github.com/spf13/viper

          后續(xù)計(jì)劃

          1. 在線列表
          2. 支持wss
          3. 聊天機(jī)器人

          原文來自:www.ancii.com/awugjp68e/

          文章轉(zhuǎn)載:Go開發(fā)大全

          (版權(quán)歸原作者所有,侵刪)


          點(diǎn)擊下方“閱讀原文”查看更多

          瀏覽 46
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日屄影院 | 欧美另类激情总和网 | 日韩 成人 在线 中字 | 国产乱婬AV公 | www.夜夜嗨 |