2012-02-27 65 views
0

我建立一個網站,我需要更新項目計數器,只要其更新在數據庫中。當任何用戶添加一個新項目時,項目計數器應該在瀏覽器中自動更新,但我不想一次又一次地向服務器發送Ajax請求以從DB獲取計數,然後在Web瀏覽器中更新計數器。如何更新計數器而不發送請求到服務器

我想要類似的「如何facebook通知更新」自動刷新頁面或發送任何ajax請求,我知道有使用一些推技術,但我不知道它是如何工作的。

如果有人提供了一些示例代碼來實現這一點,這將是非常好的。

謝謝...

回答

1

你有沒有考慮過使用SignalR?

http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx

http://signalr.net/

這是基於快速POC閱讀一些SO答覆後上述物品的示例代碼。希望能幫助到你。

  • 創建一個新的空ASP.NET Web應用程序項目
  • 通過的NuGet

  • 添加SignalR包添加UserCounter.cs與下面的代碼。只需要從Hub基類繼承這個類。

    using SignalR.Hubs; 
    public class UserCounter : Hub { } 
    
  • 添加一個Default.aspx的與下面的代碼:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    </head> 
    <body> 
        <form id="form1" runat="server"> 
         <div> 
          Number of users currently online - <b><span id="noOfUsers">0</span> users</b> 
          <br /> 
          <a target="_blank" href="UpdateNoOfUsers.aspx">Change number of users</a> 
         </div> 
        </form> 
        </body> 
        <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script> 
        <script src="Scripts/jquery.signalR.js" type="text/javascript"></script> 
        <script src="/signalr/hubs" type="text/javascript"></script> 
    
        <script type="text/javascript"> 
        $(function() { 
         var usc = $.connection.userCounter; 
    
         usc.noOfUsersUpdated = function (message) { 
          $('#noOfUsers').text(message); 
         }; 
    
         $.connection.hub.start(); 
        }); 
    </script> 
    
    </html> 
    
  • 添加UpdateNoOfUsers.aspx與下面的代碼:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    </head> 
        <body> 
         <form id="form1" runat="server"> 
          <div> 
           No. of users: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
           <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
          </div> 
         </form> 
        </body> 
        </html> 
    
  • 添加事件處理程序的按鈕 - 點擊UpdateNoOfUsers.aspx中的按鈕

    using SignalR; 
    using SignalR.Infrastructure; 
    using SignalR.Hosting.AspNet; 
    
    protected void Button1_Click(object sender, EventArgs e) 
    { 
        IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
        dynamic clients = connectionManager.GetClients<UserCounter>(); 
        clients.noOfUsersUpdated(TextBox1.Text); 
    } 
    
  • 運行設置「的Default.aspx」作爲啓動頁面上的「用戶更改號碼」

  • 點擊後的應用程序鏈接,打開一個新的瀏覽器窗口

  • 在文本輸入一個數字然後單擊按鈕查看基本窗口中的值更改!在其他一些瀏覽器中打開此頁面並查看相同的行爲!