[練手專案]Gin+websocket 的多人聊天室

hezhizheng發表於2020-10-10

練手小專案,為熟悉Gin框架跟websocket使用 ??????

線上demo (PS: 請儘量使用Chrome遊覽器)

github地址

結構

.
|-- conf
|-- controller
|-- models
|-- routes
|-- services
|   |               `-- img_kr
|   |               `-- message_service
|   |               `-- session
|   |               `-- user_service
|                   `-- validator
|-- sql
|-- static
|   |               `-- bootstrap
|   |   |           `-- css
|   |   |           `-- fonts
|   |               `-- js
|   |-- emoji
|   |-- images
|   |   |           `-- face
|   |   |           `-- rooms
|   |   |           `-- theme
|   |               `-- user
|   |-- javascripts
|   |-- rolling
|   |   |           `-- css
|   |               `-- js
|   `-- stylesheets
|-- tmp
|-- tmp_images
|-- views
`-- ws

介面




feature

  • 登入/註冊(防止重複登入)
  • 群聊(支援文字、emoji、圖片)
  • 歷史訊息檢視(暫時僅支援最新100條)
  • go mod 包管理
  • 靜態資源嵌入,執行只依賴編譯好的可執行檔案與mysql

database

mysql

Tools

使用

# 自行匯入資料庫檔案 sql/go_gin_chat.sql
git clone github.com/hezhizheng/go-gin-chat
cd go-gin-chat
cp conf/config.go.env config.go // 根據實際情況修改配置
go-bindata -o=bindata/bindata.go -pkg=bindata ./static/... ./views/... // 安裝請參考 https://blog.hi917.com/detail/87.html
go run main.go 

nginx 部署

server {
    listen 80;
    server_name  go-gin-chat.hzz.cool;

    location ~ .*\.(gif|jpg|png|css|js)(.*) {
                proxy_pass http://127.0.0.1:8322;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_cache cache_one;
                proxy_cache_valid 200 302 24h;
                proxy_cache_valid 301 30d;
                proxy_cache_valid any 5m;
                expires 90d;
                add_header wall  "Big brother is watching you";
    }

   location / {
       try_files /_not_exists_ @backend;
   }

   location @backend {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;

        proxy_pass http://127.0.0.1:8322;
    }

   location /ws {
        proxy_pass http://127.0.0.1:8322;
        proxy_redirect off;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
        proxy_read_timeout 6000s;
   }

Tip

  • 傳送訊息請點選傳送按鈕,Enter鍵觸發貌似有相容性問題。。。
  • 修改靜態檔案需要執行 go-bindata -o=bindata/bindata.go -pkg=bindata ./static/... ./views/... 重新編譯

todo

  • 心跳機制
  • 多頻道聊天
  • 私聊
  • 線上使用者列表
  • https支援
本作品採用《CC 協議》,轉載必須註明作者和本文連結
hezhizheng

相關文章