Статьи

Метеор как постоянный слой

Идея рассматривать Метеор как постоянный слой может быть сумасшедшей. Но для этого есть веская причина: передача данных в реальном времени на подключенных клиентов с использованием протокола Distribute Data Protocol . Тогда почему мы не можем написать все приложение в Meteor, включая интерфейс пользователя, да, мы можем его поддержать. Но у некоторых людей есть предпочтения, или каждому может быть неудобно создавать потрясающий пользовательский интерфейс в Meteor, но хорошо в ASP.NET. Так как же мы соединяем лучшее из обоих миров? Давайте посмотрим на это.

Давайте подумаем об онлайн-табло по крикету, какие компоненты мы можем иметь


  1. Фид счета, даемон, который получает оценку от REST Api или веб-службы и обновляет базу данных.

  2. Веб-приложение, которое извлекает данные и представляет их пользователю.

Проблема в том, чтобы получить обновленную оценку, необходимую пользователю для обновления страницы. Что делать, если пользователь получает данные в режиме реального времени без обновления страницы. Давайте посмотрим, как добавить такие функции.

Здесь пользовательский интерфейс будет в ASP.NET, а клиентская библиотека DDP — это DDPClient.NET, и для передачи данных в реальном времени на подключенный клиент мы можем использовать SignalR . DDPClient.NET интегрирован с SignalR.

 

MeteorPersistenceLayer

 

Давайте посмотрим, как DDPClient.NET можно использовать в этом сценарии для передачи данных подключенным клиентам. В одном из моих предыдущих постов я объяснил немного подробнее о DDPClient.NET. Недавно я добавил к нему среду SignalR, чтобы расширить DDPClient, доступный из любого типа приложения, будь то приложение ASP.NET или Javascript, приложение Windows Phone или Desktop, которое может выступать в качестве клиента SignalR.

В оставшейся части статьи мы увидим, как получать обновления в реальном времени с сервера Meteor с использованием DDPClient.NET.

Прямо сейчас в DDPClient.NET SignalR использует сам хостинг. Давайте посмотрим, как запустить DDPClient.NET, для теста я разместил его в консольном приложении.

class Program
{
    static void Main(string[] args)
    {
        DDPClientHost host = new DDPClientHost("http://localhost:8081/", "localhost:3000");
        host.Start();
        Console.ReadLine();
    }
}

DDPClientHost принимает два параметра: первый, по которому URL-адрес DDPClient.NET должен прослушивать входящий запрос, второй — указать, где работает сервер Meteor. Затем просто вызовите функцию Start в экземпляре DDPClientHost. Вот и все, теперь DDPClient.NET готов принять входящий запрос.

ASP.NET Javascript клиент

Давайте посмотрим, как подписаться на опубликованный элемент Метеора от клиента javascript.

$(function () {
    var connection = $.hubConnection('http://localhost:8081/');
    proxy = connection.createProxy('DDPStream')
    connection.start()
             .done(function () {
                 proxy.invoke('subscribe', 'allproducts','product');
                 $('#messages').append('<li>invoked subscribe</li>');
             })
             .fail(function () { alert("Could not Connect!"); });


             proxy.on('flush', function (msg) {
                 $('#messages').append('<li>' + msg.prodName + '</li>');
             });

});

Давайте сделаем краткий обзор кода. Как вы видете

  • Узел соединения должен указывать на URL-адрес, по которому DDPClient.NET прослушивает.
  • Прокси должен быть создан для DDPStream , это SignalR Hub и обязательно использовать то же имя.

  • Как только соединение успешно началось, мы должны вызвать
    функцию
    Subscribe, объявленную в концентраторе DDPStream, с
    опубликованным именем элемента, объявленным в Meteor. мы также должны передать имя возвращаемой коллекции, в этом случае она возвращает коллекцию Product.
    Если в случае, если опубликованное имя Метеора и название коллекции совпадают, мы можем просто написать proxy.invoke ( ‘subscribe’ , ‘product’ ); Вам не нужно передавать имя коллекции ».

Посмотрите код ниже, чтобы узнать, как опубликовать элемент с Meteor Server

Meteor.publish("allproducts", function () {
    return Products.find();
});

Products — это коллекция Meteor, которая возвращает Product

Products = new Meteor.Collection("product");

  • Также у нас должна быть функция
    Flush, как показано ниже. Эта функция вызывается DDPStream для отправки данных подключенным клиентам.
proxy.on('flush', function (msg) {
    $('#messages').append('<li>' + msg.prodName + '</li>');
});

Клиент настольного / консольного приложения

Это похоже на код, показанный выше, но это будет в C #. Смотрите код ниже.

class Program
{
    static void Main(string[] args)
    {
        var hubConnection = new HubConnection("http://localhost:8081/");
        var ddpStream = hubConnection.CreateProxy("DDPStream");
        ddpStream.On("flush", message => System.Console.WriteLine(message.prodName));
        hubConnection.Start().Wait();
        ddpStream.Invoke("Subscribe", "allproducts","product");
        System.Console.Read();
    }
}

Вот и все, что мы сделали. Теперь о любой вставке или обновлении данных в коллекцию продукта будут немедленно уведомлены все подключенные клиенты. Если вы запустите приложение, вы увидите, что на странице ASP.NET будут показаны все новые продукты без обновления страницы. DDPClient.NET все еще находится в разработке.

Вы можете скачать DDPClient.NET и пример с Github .

Удачного кодирования …