asp.net-core-signalr-a-ilk-addimlar

Asp.NET CORE SignalR-a ilk addımlar

               SignalR, Microsoft-un real vaxtda, ikitərəfli(real-time,bi-directional communication) komminasiya qurmaq üçün yaratdığı əsas texnologiyadır. Bu texnologiya vaxitəsilə biz, online oyunlar, online chat, real-time statistika təqdim edən proqramlar hazırlaya bilərik.

PS: Mənbə kodlarına buradan baxa bilərsiniz.

               SignalR əslində tam da bir yenilik deyil. Təməlində aşağıdakı texnologiyalar dayanır:

1)Web Socket

2)Server Send Events

3)Ajax Long Pooling

4)Forever Frame

               SignalR yuxarıda sadalanan mexanizmlər üçün bir növ örtük rolunu oynayır, arxa planda isə istifadəçidən asılı olaraq sadalanan texnologiyalardan birini istifadə edir. İlk prioritetdə isə veb soketləri istifadə edir.

 Həm Asp.Net, həm də Asp.NET Core-da təqdim olunan bu texnologiya üçün Core-da xüsusi bir template forması yoxdur. Biz rahatlıqla istər Mvc, istər Razor Pages-ə signalR-ı bağlaya bilərik.

               Kodlamağa başlayaq

               Asp.Net Core 3.1-də MVC template seçdikdən sonra artıq SignalR-ı yükləməyə başaya bilərik. Bununçün ilk öncə proyekt üzərində sağ düymə vuraraq Manage Client Side Libraries seçirik. Bu bizə libman-ı isitfadə etməyə imkan verir. Libman bir paket menecer olaraq front  proqramlaşdırılmasında lazım olan elementləri(burada css, js) yükləməyə imkan verir. Bunu Bower, Gulp,Yarn-ın lightweight variantı kimi baxa bilərik. Generasiya olunmuş libman.json faylını belə bir formaya salmaq lazımdır.

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "provider": "unpkg",
      "library": "@microsoft/",
      "destination": "wwwroot/lib/SignalR"
    }
  ]
}

Bu kod nümunəsi bizə signalr kitabxanasını yükləməyə imkan verir. Paketin yüklənəcəyi provayder olaraq unpkg göstəririk. Daha sonra library vasitəsilə hansı kitabxananı yükləmək istədiyimizi göstəririk. Sonda isə destination ilə yüklənəcək olan kitabxananın saxlanma yerini veririk.

               Əvvəllər signalr-in işləməsi üçün jquery kitabxanasına ehtiyac var idi, artıq Microsoft bu ehtiyacı tam aradan qaldıraraq yerni versiyada SignalR-ı tamamilə yenidən yazıb.

               Yüklənmə bitdikdən sonra kodu kompilyasiya etdikdə aşağıdakı erroru ala bilərsiniz.

Problemi aradan qaldırmaq üçün Yüklənən signalR qovluğundakı package.json faylında dependencies bolməsinə es6-promise-in dəstəklənməsini əlavə etmək lazımdır.

SignalR-da bütün backend əməliyatlar Hub üzərindən yerinə yetirilir. Hub vasitəsilə klient tərəflə əlavə saxlamaq, oradakı event-i invoke etmək, həmçinin klientdən məlumat almaq olur. Hub ən aşağı səviyyədə transport vasitələri saxlayır ki, onların da adını yuxarıda qeyd etmişik

Daha sonra Proyektimizdə Hubs qovluğu yaradaraq orada Hub klasından törəyən MyChathub adlı klas yaradırıq. Klasın əsas məqsədi istifadəçidən məlumat almaq və onu online qoşulu olan hərkəsə yönləndirməkdir.

namespace SignalRApp.Hubs
{
    public class MyChatHub : Hub
    {
        //klient server məlumat göndərmək üçün bu metoda müraciət etməlidir!
        public async Task ServerReceiver(string user, string message)
        {
            //server aldığı məlumatları klientlərin hər birinə
            //oradaki ClientReceiver "funksiyası" vasitəsilə ötürür
            await Clients.All.SendAsync("ClientReceiver", user, message);
        }
    }
}

Hub ilə əlaqə yaratmaq və ümumiyyətlə signalR-ı qoşmaq üçün Startup faylında aşağıdakı dəyişikliyi edirik

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddSignalR();
            services.AddControllersWithViews();
        }


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
       
          //........

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapHub("/chat");
            });
        }

Bütün hazırlıqlar tamamlandıqdan sonra artıq html bölməsinə keçib interfeysi hazırlaya bilərik.

(İnterfeys microsoft-un rəsmi səhifəsindəki kimi, sadəcə üzərində xırda modifikasiyalarla göstərilib)

Daha sonra JS bölməsini hazır edirik.

Artıq səhifəni işə saldıqda url-ə daxil olan istənilən bir adam qrupa mesaj yaza bilir .

PS: Mənbə kodlarına buradan baxa bilərsiniz.

 

 

               

 

 

               

Tural

Tural Süleymani

Süleymani Tural Microsoft-un MCSD statuslu mütəxəssisidir, 2008-ci ildən bu yana proqramlaşdırma üzrə tədris aparır

Müəllifin bu dildə ən son postları

Bu yazıları da bəyənə bilərsiniz