目前websocket技術已經很成熟,選型Go語言,當然是為了節省成本以及它強大的高并發性能。我使用的是第三方開源的websocket庫即gorilla/websocket。
阿克塞哈薩克族自治網站制作公司哪家好,找創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、響應式網站設計等網站項目制作,到程序開發,運營維護。創新互聯公司自2013年創立以來到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯公司。
由于我們線上推送的量不小,推送后端需要部署多節點保持高可用,所以需要自己做集群,具體架構方案如圖:
Auth Service:鑒權服務,根據Token驗證用戶權限。
Collect Service:消息采集服務,負責收集業務系統消息,存入MongoDB后,發送給消息分發服務。
Dispatch Service:消息分發服務,根據路由規則分發至對應消息推送服務節點上。
Push Service:消息推送服務,通過websocket將消息推送給用戶。
集群推送的關鍵點在于,web端與服務端建立長連接之后,具體跟哪個推送節點保持長連接的,如果我們能夠找到對應的連接節點,那么我們就可以將消息推送出去。下面講解一下集群的大致流程:
1. web端用戶登錄之后,帶上token與后端推送服務(Push Service)保持長連接。
2. 推送服務收到連接請求之后,攜帶token去鑒權服務(Auth Service)驗證此token權限,并返回用戶ID。
3. 把返回的用戶ID與長連接存入本地緩存,保持用戶ID與長連接綁定關系。
4. 再將用戶ID與本推送節點IP存入redis,建立用戶(即長連接)與節點綁定關系,并設置失效時間。
5. 采集服務(Collect Service)收集業務消息,首先存入mongodb,然后將消息透傳給分發服務(Dispatch Service)。
6. 分發服務收到消息之后,根據消息體中的用戶ID,從redis中獲取對應的推送服務節點IP,然后轉發給對應的推送節點。
7. 推送服務節點收到消息之后,根據用戶ID,從本地緩存中取出對應的長連接,將消息推送給客戶端。
其他注意事項:
Socket通信的原理還是比較簡單的, 它大致分為以下幾個步驟。 服務器端的步驟如下。 (1)建立服務器端的Socket,開始偵聽整個網絡中的連接請求。 (2)當檢測到來自客戶端的連接請求時,向客戶端發送收到連接請求的信息,并建立與客戶端之間的...
蘋果的消息推送是通過請求域名: 實現的,該域名解析結果為美國,這引發了兩個問題:
1、接口請求時間長,性能低,而且容易請求超時報錯
2、高峰期推送請求錯誤率升高
總體思路:增加一個美國代理服務器,通過代理服務器請求蘋果消息推送服務
1、原來流程
2、現在流程
3、具體方案實施選擇
選擇一:proxy服務器,部署一個正向代理服務,提供push消息的正向代理,消息通過代理服務器送達蘋果服務端
選擇二:proxy服務器,獨立實現、部署一個 標準的apns服務,負責 ios消息推送。將需要走美國節點的請求轉發到該proxy節點
具體情況、具體分析,應思考的點:
問題一、蘋果官方提供的SDK中,不支持設置代理服務器。官方SDK不適合更改,對以后系統更新不利
問題二、只有蘋果的push服務需要代理,其他例如華為、小米、vivo不應走海外代理
問題三、代理安全性
問題四、代理方案下,有重試邏輯。 如何準確定義和判斷失敗, 可能會引起消息重復推送
問題五、實現簡單、有效,正向代理方式:只需實現一個實例化對象方法,其他利用原始sdk即可。獨立apns服務方式:需要實現一個apns服務,國內、國外均需服務部署,需要增加獨立的開發和運營成本,另外還得改造調用服務,實現請求調度,優點服務獨立、單一,具備一個單獨微服務條件
github.com/sideshow/apns2
方法一: 修改SDK文件
第一步:設置環境變量
第二步:修改apns2.NewClient方法
方法二: 從新定義一個NewClient方法
文章題目:go語言的推送 go語言import
網頁URL:http://vcdvsql.cn/article16/ddoiodg.html
成都網站建設公司_創新互聯,為您提供App設計、電子商務、移動網站建設、品牌網站設計、外貿網站建設、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯