使用SignalR實現消息提醒

Asp.net SignalR是微軟爲實現實時通訊的一個類庫。通常狀況下,SignalR會使用JavaScript的長輪詢(long polling)的方式來實現客戶端和服務器通訊,隨着Html5中WebSockets出現,SignalR也支持WebSockets通訊。另外SignalR開發的程序不單單限制於宿主在IIS中,也能夠宿主在任何應用程序,包括控制檯,客戶端程序和Windows服務等,另外還支持Mono,這意味着它能夠實現跨平臺部署在Linux環境下。git

SignalR內部有兩類對象:github

  1. Http持久鏈接(Persisten Connection)對象:用來解決長時間鏈接的功能。還能夠由客戶端主動向服務器要求數據,而服務器端不須要實現太多細節,只須要處理PersistentConnection 內所提供的五個事件:OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 便可。
  2. Hub(集線器)對象:用來解決實時(realtime)信息交換的功能,服務端能夠利用URL來註冊一個或多個Hub,只要鏈接到這個Hub,就能與全部的客戶端共享發送到服務器上的信息,同時服務端能夠調用客戶端的腳本。

SignalR將整個信息的交換封裝起來,客戶端和服務器都是使用JSON來溝通的,在服務端聲明的全部Hub信息,都會生成JavaScript輸出到客戶端,.NET則依賴Proxy來生成代理對象,而Proxy的內部則是將JSON轉換成對象。服務器

消息提醒也就是當客戶有新消息來時,在客戶端的右下角進行彈框提醒。要實現這個功能的思路是:微信

  1. SignalR服務端推送消息到客戶端的實現方式爲調用客戶端的receiveMessage方法來將消息附加到聊天記錄內,因此咱們能夠在客戶端的receiveMessage方法中實現彈框的邏輯。
  2. 找好了方法定義的位置後,天然是去找一個比較好的彈框效果JS類庫了,這裏使用的是iNotify庫來實現的。該庫的github地址爲:https://github.com/jaywcjlove/iNotify,在線測試地址爲:http://jslite.io/iNotify/
  3. 你看QQ或者微信的消息提醒,消息提醒通常是在你不在聊天的當前Tab頁面纔會彈出,咱們能夠利用Html5 visibilitychange事件來實現,不過我這裏是經過失焦點的方式,也就是focus事件。
JavaScript
 
// 接收消息 
        systemHub.client.receivePrivateMessage = function(fromUserId, userName, message) { 
       // 專題二中的代碼 
       
      // 消息提醒的代碼 
    if (active == false) { 
                var iN = new iNotify({ 
                    effect: 'flash', 
                    interval: 500, 
                    audio: { 
                        file: ['/Music/msg.mp3'] 
                    }, 
                    notification: { 
                        title: "通知!", 
                        body: '您有一條新消息' 
                    } 
                }); 
 
                iN.setTitle(true).player(); 
                iN.setFavicon(true).setTitle(true).notify(); 
            } 
        }; 
}    
相關文章
相關標籤/搜索