在以前的文章當中,基於websocket實現了一個簡單的pub和sub模型,可是後面沒有提供使用場景,回到文章的開頭,一開始寫這個是碰到一個須要作程序自動更新的問題,對方但願我提供一個解決思路。有了以前的積累,如今能夠嘗試配合這個應用場景進行一輪實驗。git
以github爲例,GitHub運行指定事件發生時,通知經過HTTP的POST請求調用外部服務。,github的webhook在頁面上有解釋:github
Webhooks allow external services to be notified when certain events happen. When the specified events happen, we’ll send a POST request to each of the URLs you provide. Learn more in our Webhooks Guide.
golang
那麼先配置好github的webhook,回調的url填http://webhook.notr.tech/github?topic=common
web
webhook配置完成了,接下來須要給broker添加一個針對webhook的處理接口小程序
func (b *Broker) onGithub(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
r.Body.Close()
topic := r.FormValue("topic")
msg := string(body)
log.Printf("recv publish topic: %s msg: %s\n", topic, string(body))
b.muEntry.RLock()
subscribers := b.entry[topic]
b.muEntry.RUnlock()
if subscribers == nil {
// drop message once no subscriber
// TODO: store msg
return
}
for _, s := range subscribers {
s.push(msg)
}
}
複製代碼
接下來須要進行測試:微信
結果:websocket
broker收到github調用的消息app
subscriber獲取到broker推送的消息socket
在開發測試階段,broker和subscriber都在我本機運行的,,可是github設置的webhook url是http://webhook.notr.tech,明顯是訪問不了我本機的,爲了在開發過程當中,爲了更加專一於開發,我用了notr內網穿透這款工具,讓github在調用webhook.notr.tech時,至關於github直接訪問我本機http://127.0.0.1:80,在微信公衆號/小程序,或者須要第三方回調的場景中,若是有須要能夠嘗試使用notr內網穿透ide