一個簡單的SignalR例子


本文介紹如何使用SignalR的Hub制作一個簡單的點贊頁面。不同瀏覽器(或者不同窗口)打開同一個頁面,在任何一個頁面點贊,所有頁面同時更新點贊數。

1、使用Visual Studio Community 2013新建一個Web項目,選擇空白模板。

 

2、使用NuGet安裝SignalR。

3、添加Startup.cs。

代碼如下。

namespace SignalRDemo
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

4、添加一個Hub。

代碼如下。給Hub起一個名字,方便后面的html頁面使用。當html頁面觸發Rate()方法時,調用所有客戶端的rateUpdate()方法。

namespace SignalRDemo
{
    [HubName("rateHub")]
    public class RateHub : Hub
    {
        //don't do this in real project
        private static int _rating;

        public void Rate()
        {
            _rating += 1;
            Clients.All.rateUpdate(_rating);
        }
    }
}

5、添加一個html頁面rate.html。代碼如下。先聲明一個連接,然后創建一個Hub,createHubProxy("rateHub")中使用的就是Hub的名字(HubName)。接下來添加rateUpdate事件處理,即更新點贊數(rateUpdate被服務器端的Hub調用)。最后啟動Hub,添加點贊按鈕的事件處理(調用服務器端的Hub的Rate方法)。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Rating</title>
</head>
<body>
    <h2>Please rate</h2>
    <input type="button" id="vote" value="Good (0)" />

    <script src="Scripts/jquery-1.6.4.js"></script>
    <script src="Scripts/jquery.signalR-2.2.0.js"></script>

    <script type="text/javascript">
        $(function () {
            var con = $.hubConnection();
             
            var hub = con.createHubProxy("rateHub");
            
            hub.on('rateUpdate', function (count) {
                $('#vote').val("Good (" + count + ")");
            });

            con.start().done(function () {
                $('#vote').click(function () {
                    hub.invoke("Rate");
                });
            });
        });
    </script>
</body>
</html>

6、將rate.html設置為起始頁並運行。多打開幾個窗口,點擊任意窗口中的按鈕,所有窗口中的點贊數量同時更新。

 

7、這里有個問題。當點贊數大於零時,新打開的窗口的點贊數仍然是0,因為服務器端的Hub不知道有一個新頁面打開了(有新的連接)。只需給服務器端Hub添加如下代碼,就可以解決。OnConnected事件在出現任意新的連接時觸發,Clients.Caller表示連接的發起端。

        public override Task OnConnected()
        {
            Clients.Caller.rateUpdate(_rating);
            return base.OnConnected();
        }

源碼下載

推薦SignalR官網的一個Demo:http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr

SignalR官網:http://www.asp.net/signalr

 

本文如有不妥之處,請見諒!

 

 

 

Startup.cs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM