Как обновить счетчик без отправки запроса на сервер - PullRequest
0 голосов
/ 27 февраля 2012

Я создаю веб-сайт, где мне нужно обновлять счетчик проекта всякий раз, когда он обновляется в БД.когда какой-либо пользователь добавляет новый проект, счетчик проекта должен автоматически обновляться в браузере, но я не хочу снова и снова отправлять ajax-запрос на сервер, чтобы получить счетчик из БД, а затем обновлять счетчик в веб-браузере.

Я хочу что-то похожее на то, «как уведомление на Facebook обновляется» автоматически, без обновления страницы или отправки какого-либо ajax-запроса, я знаю, что используется какая-то технология PUSH, но я не уверен, как она работает.

Это будет очень здорово, есликто-то предоставит пример кода для достижения этой цели.

Спасибо ...

1 Ответ

1 голос
/ 27 февраля 2012

Рассматривали ли вы использовать SignalR?

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

http://signalr.net/

Вот пример кода, основанного на быстром POC после прочтения некоторых ответов SO и статей выше Надеюсь, это поможет.

  • Создание нового пустого проекта веб-приложения ASP.NET
  • Добавление пакета SignalR через NuGet

  • Добавьте 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» в качестве начальной страницы

  • Нажмите на ссылку «Изменить количество пользователей», чтобы открыть новое окно браузера

  • Введите число в текстовом поле и нажмите на кнопку, чтобы увидеть изменение значения в базовом окне! Откройте эту страницу в другом браузере и посмотрите на то же поведение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...