使用golang開發websocket的記錄

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

使用beego架構進行整個社區的restful api的開發,尋找資料後決定使用github.com/gorilla/websocket  作為websocket的包,

定義websocket的屬性

var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,}

  都是按照官方的例子來,期間也參考了beego的一個聊天室的執行個體。

ws, err := upgrader.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil)defer ws.Close()

因為是使用beego架構,所以執行個體化websocket的時候,傳輸的參數是使用beego的擷取方式

 執行個體化ws以後,使用了一個for迴圈,等待接收資料,並且對資料進行處理

_, p, err := ws.ReadMessage()

  這裡我沒有對內容進行判斷,所以第一個參數,返回的資料類型,我直接拋棄了,因為功能很簡單,所以也就不做資料類型驗證,對資料進行一堆處理之後,返回json

if err = ws.WriteJSON(resMap); err != nil {fmt.Println(err)ws.Close()break}

  測試方便,把報錯資訊直接打出,ws包帶著返回json的方式,直接把map傳遞過來就可以了,如果報錯一定要直接ws.Close() 不然會被後台資訊淹沒掉

 

其實用法很簡單,麻煩的是公司的nginx版本太低,部署的時候先升級了nginx,然後做了個反向 Proxy,監聽了指令碼的連接埠,

設定了cgi的存活時間,否則是按照php的設定來的,所以單獨給websocket程式的段增加了期間

 

因為程式邏輯裡還有一個延遲等待的功能,開始是使用一個time.sleep來實現,後來讀了go語言程式設計後,學會了一招,可以用channel來做處理。

 

設定nginx的方法

因為部署在php的伺服器上,所以直接使用supertctl做了一個進程監控,讓go作為一個後台進程運行,然後使用nginx做了一個反向 Proxy,設定如下

 

首先。修改nginx.conf檔案, 要在 http 裡面添加配置,也就是 跟server同級

map $http_upgrade $connection_upgrade {    default upgrade;    '' close;} #limit_zone  crawler  $binary_remote_addr  10m;upstream websocket {    server 127.0.0.1:8198;}

  設定反向 Proxy 我的是監聽本機8198連接埠

 

然後設定 訪問的目錄

location /backapi/ {                        proxy_set_header Host $host;            proxy_pass http://websocket;            proxy_http_version 1.1;            proxy_read_timeout 86400s;            keepalive_timeout 86400s;            #proxy_redirect off;            proxy_set_header Upgrade $http_upgrade;            proxy_set_header Connection "upgrade";            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                  }

  設定了nginx擷取到對目錄的訪問的時候,調用go的指令碼進行解析,並且設定了讀取的時間為86400秒,防止ngxin對用戶端自動關閉

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.