Aracılığıyla paylaş


SignalR 1.x'te Bağlantı Ömrü Olaylarını Anlama ve İşleme

Tarafından Patrick Fletcher, Tom Dykstra

Uyarı

Bu belgeler SignalR'nin en son sürümüne yönelik değildir. ASP.NET Core SignalR'ye göz atın.

Bu makalede, işleyebileceğiniz SignalR bağlantısı, yeniden bağlantı ve bağlantı kesme olaylarına ve yapılandırabileceğiniz zaman aşımı ve tutma ayarlarına genel bir bakış sağlanır.

Makalede SignalR ve bağlantı ömrü olayları hakkında bilgi sahibi olduğunuz varsayılır. SignalR'ye giriş için bkz. SignalR - Genel Bakış - Başlarken. Bağlantı ömrü olaylarının listeleri için aşağıdaki kaynaklara bakın:

Genel Bakış

Bu makale aşağıdaki bölümleri içerir:

API Başvurusu konularının bağlantıları API'nin .NET 4.5 sürümünedir. .NET 4 kullanıyorsanız API konularının .NET 4 sürümüne bakın.

Bağlantı ömrü terminolojisi ve senaryoları

OnReconnected SignalR Hub'ında olay işleyicisi, belirli bir istemci için doğrudan sonrasında OnConnected ancak sonrasında OnDisconnected yürütülemez. Bağlantı kesilmeden yeniden bağlantı kurabilmenizin nedeni, SignalR'de "bağlantı" sözcüğünün kullanıldığı çeşitli yollar olmasıdır.

SignalR bağlantıları, aktarım bağlantıları ve fiziksel bağlantılar

Bu makale SignalR bağlantıları, aktarım bağlantıları ve fiziksel bağlantılar arasında ayrım yapacaktır:

  • SignalR bağlantısı, SignalR API'si tarafından korunan ve bağlantı kimliğiyle benzersiz olarak tanımlanan istemci ile sunucu URL'si arasındaki mantıksal ilişkiyi ifade eder. Bu ilişkiyle ilgili veriler SignalR tarafından korunur ve aktarım bağlantısı kurmak için kullanılır. İstemci yöntemi çağırdığında Stop veya SignalR kayıp bir aktarım bağlantısını yeniden kurmaya çalışırken bir zaman aşımı sınırına ulaşıldığında ilişki sona erer ve SignalR verileri atılır.
  • Aktarım bağlantısı , istemci ile sunucu arasındaki mantıksal ilişkiyi ifade eder ve bu ilişki, dört aktarım API'lerinden biri tarafından korunur: WebSockets, sunucu tarafından gönderilen olaylar, forever frame veya uzun yoklama. SignalR aktarım bağlantısı oluşturmak için aktarım API'sini kullanır ve aktarım API'si aktarım bağlantısını oluşturmak için fiziksel bir ağ bağlantısının varlığına bağlıdır. Aktarım bağlantısı SignalR bağlantıyı sonlandırdığında veya aktarım API'sinin fiziksel bağlantının kesildiğini algıladığında sona erer.
  • Fiziksel bağlantı , fiziksel ağ bağlantılarını (kablolar, kablosuz sinyaller, yönlendiriciler vb.) ifade eder. -- bir istemci bilgisayar ile sunucu bilgisayarı arasındaki iletişimi kolaylaştıran. Aktarım bağlantısı kurmak için fiziksel bağlantı mevcut olmalı ve SignalR bağlantısı kurmak için bir aktarım bağlantısı kurulmalıdır. Ancak fiziksel bağlantının bozulması her zaman aktarım bağlantısını veya SignalR bağlantısını hemen sonlandırmaz. Bu konuda daha sonra açıklanacaktır.

Aşağıdaki diyagramda SignalR bağlantısı Hubs API ve PersistentConnection API SignalR katmanı, aktarım bağlantısı Aktarımlar katmanı ve fiziksel bağlantı ise sunucu ile istemciler arasındaki çizgilerle temsil edilir.

SignalR mimari diyagramı

Bir SignalR istemcisinde yöntemini çağırdığınızda Start , bir sunucuyla fiziksel bağlantı kurmak için SignalR istemci koduna ihtiyaç duyduğu tüm bilgileri sağlarsınız. SignalR istemci kodu, http isteğinde bulunmak ve dört aktarım yönteminden birini kullanan fiziksel bir bağlantı kurmak için bu bilgileri kullanır. Aktarım bağlantısı başarısız olursa veya sunucu başarısız olursa, istemci aynı SignalR URL'sine otomatik olarak yeni bir aktarım bağlantısı kurmak için ihtiyaç duyduğu bilgilere sahip olduğundan SignalR bağlantısı hemen gitmez. Bu senaryoda kullanıcı uygulamasının müdahalesi söz konusu değildir ve SignalR istemci kodu yeni bir aktarım bağlantısı oluşturduğunda yeni bir SignalR bağlantısı başlatmaz. SignalR bağlantısının sürekliliği, yöntemini çağırdığınızda oluşturulan bağlantı kimliğinin değişmemesi gerçeğine Start yansıtılır.

Hub'daki OnReconnected olay işleyicisi, bir aktarım bağlantısı kaybedildikten sonra otomatik olarak yeniden kurulduğunda yürütülür. Olay OnDisconnected işleyicisi SignalR bağlantısının sonunda yürütülür. SignalR bağlantısı aşağıdaki yollardan herhangi biriyle sona erebilir:

  • İstemci yöntemini çağırırsa Stop , sunucuya bir durdurma iletisi gönderilir ve hem istemci hem de sunucu SignalR bağlantısını hemen sonlar.
  • İstemci ile sunucu arasındaki bağlantı kesildikten sonra istemci yeniden bağlanmayı dener ve sunucu istemcinin yeniden bağlanmasını bekler. Yeniden bağlanma girişimleri başarısız olursa ve bağlantı kesme zaman aşımı süresi sona ererse, hem istemci hem de sunucu SignalR bağlantısını sonlandırır. İstemci yeniden bağlanmayı denemeyi durdurur ve sunucu SignalR bağlantısının gösterimini ortadan kaldırıyor.
  • İstemci yöntemini çağırma Stop şansı olmadan çalışmayı durdurursa, sunucu istemcinin yeniden bağlanmasını bekler ve bağlantı kesme zaman aşımı süresinden sonra SignalR bağlantısını sonlandırır.
  • Sunucu çalışmayı durdurursa, istemci yeniden bağlanmayı dener (aktarım bağlantısını yeniden oluşturur) ve bağlantı kesme zaman aşımı süresinden sonra SignalR bağlantısını sonlandırır.

Bağlantı sorunu olmadığında ve kullanıcı uygulaması signalr bağlantısını yöntemi çağırarak Stop sonlandırdığında SignalR bağlantısı ve aktarım bağlantısı yaklaşık aynı anda başlayıp biter. Aşağıdaki bölümlerde diğer senaryolar daha ayrıntılı olarak açıklanmaktadır.

Aktarım bağlantısı kesme senaryoları

Fiziksel bağlantılar yavaş olabilir veya bağlantıda kesintiler olabilir. Kesintinin uzunluğu gibi faktörlere bağlı olarak aktarım bağlantısı bırakılabilir. SignalR daha sonra aktarım bağlantısını yeniden kurmaya çalışır. Bazen aktarım bağlantısı API'si kesintiyi algılar ve aktarım bağlantısını bırakır ve SignalR bağlantının kaybolduğunu hemen öğrenir. Diğer senaryolarda, ne aktarım bağlantısı API'sinin ne de SignalR'nin bağlantının kaybolduğunu hemen fark etmez. Uzun yoklama dışındaki tüm aktarımlarda SignalR istemcisi, aktarım API'sinin algılayamadığı bağlantı kaybını denetlemek için keepalive adlı bir işlev kullanır. Uzun yoklama bağlantıları hakkında daha fazla bilgi için bu konunun devamında yer alan Zaman aşımı ve tutma ayarları bölümüne bakın.

Bir bağlantı etkin olmadığında, sunucu düzenli aralıklarla istemciye bir tutma paketi gönderir. Bu makalenin yazıldığı tarihten itibaren varsayılan sıklık 10 saniyede birdir. İstemciler bu paketleri dinleyerek bir bağlantı sorunu olup olmadığını anlayabilir. Beklenen durumlarda bir tutma paketi alınmazsa, kısa bir süre sonra istemci yavaşlık veya kesintiler gibi bağlantı sorunları olduğunu varsayar. Tutma işlemi daha uzun bir süre sonra hala alınmazsa, istemci bağlantının bırakıldığını varsayar ve yeniden bağlanmaya başlar.

Aşağıdaki diyagramda, aktarım API'si tarafından hemen tanınmayan fiziksel bağlantıyla ilgili sorunlar olduğunda tipik bir senaryoda ortaya konan istemci ve sunucu olayları gösterilmektedir. Diyagram aşağıdaki koşullar için geçerlidir:

  • Aktarım WebSockets, forever frame veya sunucu tarafından gönderilen olaylardır.
  • Fiziksel ağ bağlantısında çeşitli kesinti dönemleri vardır.
  • Aktarım API'si kesintilerin farkında değildir, bu nedenle SignalR bunları algılamak için koruma işlevselliğine dayanır.

Taşıma bağlantısı kesiliyor

İstemci yeniden bağlanma moduna geçerse ancak bağlantı kesme zaman aşımı sınırı içinde aktarım bağlantısı kuramazsa, sunucu SignalR bağlantısını sonlandırır. Bu durumda sunucu Hub'ın OnDisconnected yöntemini yürütür ve istemcinin daha sonra bağlanmayı yönetmesi durumunda istemciye göndermek üzere bir bağlantı kesme iletisi kuyruğa alır. İstemci yeniden bağlanırsa disconnect komutunu alır ve yöntemini çağırır Stop . Bu senaryoda, OnReconnected istemci yeniden bağlandığında yürütülmedi ve OnDisconnected istemci çağırdığında Stopyürütülmedi. Aşağıdaki diyagramda bu senaryo gösterilmektedir.

Aktarım kesintileri - sunucu zaman aşımı

İstemcide oluşturulabilecek SignalR bağlantı ömrü olayları şunlardır:

  • ConnectionSlow istemci olayı.

    Son ileti veya kalıcı ping alındığından bu yana tutma zaman aşımı süresinin önceden ayarlanmış bir oranı geçtiğinde tetiklendi. Varsayılan tutma zaman aşımı uyarı süresi, tutma zaman aşımının 2/3'dür. Tutma zaman aşımı 20 saniyedir, bu nedenle uyarı yaklaşık 13 saniyede gerçekleşir.

    Varsayılan olarak, sunucu her 10 saniyede bir keepalive ping'leri gönderir ve istemci her 2 saniyede bir (keepalive zaman aşımı değeri ile keepalive zaman aşımı uyarı değeri arasındaki farkın üçte biri) için sürekli ping'leri denetler.

    Aktarım API'sinin bağlantı kesildiğinden haberdar olması durumunda SignalR, tutma zaman aşımı uyarı süresi geçmeden önce bağlantının kesileceği konusunda bilgilendirilmiş olabilir. Bu durumda olay ConnectionSlow tetiklenmez ve SignalR doğrudan Reconnecting olaya gider.

  • Reconnecting istemci olayı.

    (a) aktarım API'sinin bağlantının kaybolduğunu algılaması veya (b) son iletinin veya kalıcı ping'in alınmasından bu yana tutma zaman aşımı süresinin geçtiği durumlarda tetikler. SignalR istemci kodu yeniden bağlanmaya başlar. Taşıma bağlantısı kaybolduğunda uygulamanızın bazı eylemler gerçekleştirmesini istiyorsanız bu olayı işleyebilirsiniz. Varsayılan tutma zaman aşımı süresi şu anda 20 saniyedir.

    SignalR yeniden bağlanma modundayken istemci kodunuz bir Hub yöntemini çağırmaya çalışırsa SignalR komutu göndermeyi dener. Çoğu zaman bu tür girişimler başarısız olur, ancak bazı durumlarda başarılı olabilirler. Sunucu tarafından gönderilen olaylar, sonsuza kadar çerçeve ve uzun yoklama aktarımları için SignalR, istemcinin ileti göndermek için kullandığı ve iletileri almak için kullandığı iki iletişim kanalı kullanır. Almak için kullanılan kanal kalıcı olarak açık olan kanaldır ve fiziksel bağlantı kesildiğinde kapatılan kanaldır. Göndermek için kullanılan kanal kullanılabilir durumda kalır, bu nedenle fiziksel bağlantı geri yüklenirse alma kanalı yeniden kurulmadan önce istemciden sunucuya yapılan yöntem çağrısı başarılı olabilir. SignalR, almak için kullanılan kanalı yeniden açana kadar dönüş değeri alınmaz.

  • Reconnected istemci olayı.

    Aktarım bağlantısı yeniden başlatıldığında tetiklenir. Hub'daki OnReconnected olay işleyicisi yürütülür.

  • Closed client event (disconnected JavaScript'te olay).

    SignalR istemci kodu aktarım bağlantısını kaybettikten sonra yeniden bağlanmaya çalışırken bağlantı kesme zaman aşımı süresi dolduğunda tetikleniyor. Varsayılan bağlantı kesme zaman aşımı 30 saniyedir. (Yöntem çağrıldığından bağlantı sona erdiğinde Stop de bu olay tetiklendi.)

Aktarım API'sinin algılamadığı ve sunucudan gelen tutma ping'lerinin alımını, tutma zaman aşımı uyarı süresinden daha uzun süre geciktirmeyen aktarım bağlantısı kesintileri, bağlantı ömrü olaylarının tetiklenmesine neden olmayabilir.

Bazı ağ ortamları boştaki bağlantıları kasıtlı olarak kapatır ve tutma paketlerinin bir diğer işlevi de bu ağlara SignalR bağlantısının kullanımda olduğunu haber vererek bunu önlemeye yardımcı olmaktır. Aşırı durumlarda, kapalı bağlantıları önlemek için varsayılan kalıcı ping sıklığı yeterli olmayabilir. Bu durumda, daha sık gönderilecek tutmalı ping'leri yapılandırabilirsiniz. Daha fazla bilgi için bu konunun devamında yer alan Zaman aşımı ve tutma ayarları bölümüne bakın.

Not

Önemli

Burada açıklanan olayların sırası garanti değildir. SignalR, bağlantı ömrü olaylarını bu şemaya göre tahmin edilebilir bir şekilde tetikleme girişiminde bulunur, ancak ağ olaylarının birçok varyasyonu ve aktarım API'leri gibi temel iletişim çerçevelerinin bunları işlemesinin birçok yolu vardır. Örneğin, Reconnected istemci yeniden bağlandığında olay tetiklenmeyebilir veya OnConnected bağlantı kurma girişimi başarısız olduğunda sunucudaki işleyici çalıştırılabilir. Bu konu başlığı altında, yalnızca normalde belirli tipik koşullar tarafından üretilecek olan etkiler açıklanmaktadır.

İstemci bağlantısı kesme senaryoları

Tarayıcı istemcisinde, SignalR bağlantısını koruyan SignalR istemci kodu bir web sayfasının JavaScript bağlamında çalışır. Bu nedenle, bir sayfadan diğerine gittiğinizde SignalR bağlantısının bitmesi gerekir ve bu nedenle birden çok tarayıcı penceresinden veya sekmesinden bağlanıyorsanız birden çok bağlantı kimlikli birden çok bağlantınız olur. Kullanıcı bir tarayıcı penceresini veya sekmesini kapattığında ya da yeni bir sayfaya gittiğinde ya da sayfayı yenilediğinde SignalR bağlantısı hemen sona erer çünkü SignalR istemci kodu bu tarayıcı olayını sizin için işler ve yöntemini çağırır Stop . Bu senaryolarda veya uygulamanız yöntemini çağırdığında Stop herhangi bir istemci platformunda olay OnDisconnected işleyicisi sunucuda hemen yürütülür ve istemci olayı başlatır Closed (olay JavaScript'te adlandırılır disconnected ).

bir istemci uygulaması veya üzerinde çalıştığı bilgisayar kilitlenirse veya uyku moduna geçerse (örneğin, kullanıcı dizüstü bilgisayarı kapattığında), sunucu ne olduğu hakkında bilgilenmez. Sunucunun bildiği kadarıyla, istemcinin kaybı bağlantı kesintisi olabilir ve istemci yeniden bağlanmaya çalışıyor olabilir. Bu nedenle, bu senaryolarda sunucu istemciye yeniden bağlanma şansı vermek için bekler ve OnDisconnected bağlantı kesme zaman aşımı süresi dolana kadar (varsayılan olarak yaklaşık 30 saniye) yürütülemez. Aşağıdaki diyagramda bu senaryo gösterilmektedir.

İstemci bilgisayar hatası

Sunucu bağlantısı kesme senaryoları

Bir sunucu çevrimdışı olduğunda , yeniden başlatılır, başarısız olur, uygulama etki alanı geri dönüşüme döner vb. -- sonuç bağlantı kaybına benzer olabilir veya aktarım API'si ve SignalR sunucunun gittiğini hemen biliyor olabilir ve SignalR olayı başlatmadan ConnectionSlow yeniden bağlanmaya başlayabilir. İstemci yeniden bağlanma moduna geçerse ve sunucu kurtarılır veya yeniden başlatılırsa ya da bağlantı kesme zaman aşımı süresi dolmadan önce yeni bir sunucu çevrimiçine getirilirse, istemci geri yüklenen veya yeni sunucuya yeniden bağlanır. Bu durumda SignalR bağlantısı istemcide devam eder ve Reconnected olay oluşturulur. İlk sunucuda OnDisconnected hiçbir zaman yürütülmedi ve yeni sunucuda OnReconnected yürütülür, ancak OnConnected bu istemci için daha önce hiç yürütülmedi. (Sunucu yeniden başlatıldığında önceki bağlantı etkinliği belleği olmadığından, istemci yeniden başlatma veya uygulama etki alanı geri dönüşümünün ardından aynı sunucuya yeniden bağlanırsa etki aynıdır.) Aşağıdaki diyagramda aktarım API'sinin kayıp bağlantıyı hemen fark ettiğini varsayar, bu nedenle ConnectionSlow olay tetiklenmez.

Sunucu hatası ve yeniden bağlantı

Bağlantı kesme zaman aşımı süresi içinde sunucu kullanılamaz hale gelirse SignalR bağlantısı sona erer. Bu senaryoda, Closed olay (disconnected JavaScript istemcilerinde) istemcide oluşturulur ancak OnDisconnected sunucuda hiçbir zaman çağrılmazsınız. Aşağıdaki diyagramda aktarım API'sinin kayıp bağlantının farkında olmadığı varsayılır, bu nedenle SignalR tutma işlevi tarafından algılanır ve ConnectionSlow olay tetiklenir.

Sunucu hatası ve zaman aşımı

Zaman aşımı ve tutma ayarları

Varsayılan ConnectionTimeout, DisconnectTimeoutve KeepAlive değerleri çoğu senaryo için uygundur, ancak ortamınızın özel gereksinimleri varsa değiştirilebilir. Örneğin, ağ ortamınız 5 saniye boyunca boşta olan bağlantıları kapatırsa, tutma değerini azaltmanız gerekebilir.

Connectiontimeout

Bu ayar, aktarım bağlantısının açık bırakılıp kapatılıp yeni bir bağlantı açılmadan önce yanıt bekleme süresini temsil eder. Varsayılan değer 110 saniyedir.

Bu ayar yalnızca tutma işlevselliği devre dışı bırakıldığında geçerlidir ve normalde yalnızca uzun yoklama aktarımları için geçerlidir. Aşağıdaki diyagramda bu ayarın uzun yoklama aktarım bağlantısı üzerindeki etkisi gösterilmektedir.

Uzun yoklama aktarım bağlantısı

DisconnectTimeout

Bu ayar, olayı oluşturmadan Disconnected önce aktarım bağlantısı kesildikten sonra beklenmesi gereken süreyi temsil eder. Varsayılan değer 30 saniyedir. ayarladığınızdaDisconnectTimeoutKeepAlive, değerin 1/3'lük DisconnectTimeout bölümüne otomatik olarak ayarlanır.

Keepalive

Bu ayar, boşta bağlantı üzerinden bir tutma paketi göndermeden önce bek süre miktarını temsil eder. Varsayılan değer 10 saniyedir. Bu değer değerin 1/3'ünden DisconnectTimeout büyük olmamalıdır.

ve her ikisini de DisconnectTimeout ayarlamak istiyorsanız, sonra DisconnectTimeoutayarlayınKeepAlive.KeepAlive Aksi takdirde, zaman aşımı değerinin 1/3'lük bölümüne otomatik olarak ayarlandığında ayarınızın KeepAlive üzerine yazılırDisconnectTimeout.KeepAlive

Keepalive işlevselliğini devre dışı bırakmak istiyorsanız null olarak ayarlayın KeepAlive . Uzun yoklama aktarımı için tutma işlevselliği otomatik olarak devre dışı bırakılır.

Zaman aşımı ve tutma ayarlarını değiştirme

Bu ayarların varsayılan değerlerini değiştirmek için, bunları aşağıdaki örnekte gösterildiği gibi Global.asax dosyanızda ayarlayınApplication_Start. Örnek kodda gösterilen değerler varsayılan değerlerle aynıdır.

protected void Application_Start(object sender, EventArgs e)
{
    // Make long polling connections wait a maximum of 110 seconds for a
    // response. When that time expires, trigger a timeout command and
    // make the client reconnect.
    GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
    
    // Wait a maximum of 30 seconds after a transport connection is lost
    // before raising the Disconnected event to terminate the SignalR connection.
    GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
    
    // For transports other than long polling, send a keepalive packet every
    // 10 seconds. 
    // This value must be no more than 1/3 of the DisconnectTimeout value.
    GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
}

Bağlantıyı kesmeleri kullanıcıya bildirme

Bazı uygulamalarda, bağlantı sorunları olduğunda kullanıcıya bir ileti görüntülemek isteyebilirsiniz. Bunu nasıl ve ne zaman yapacağınıza ilişkin çeşitli seçenekleriniz vardır. Aşağıdaki kod örnekleri, oluşturulan ara sunucuyu kullanan bir JavaScript istemcisi içindir.

  • connectionSlow SignalR bağlantı sorunlarını fark eder etmez, yeniden bağlanma moduna geçmeden önce iletiyi görüntülemek için olayı işleyebilirsiniz.

    $.connection.hub.connectionSlow(function() {
        notifyUserOfConnectionProblem(); // Your function to notify user.
    });
    
  • reconnecting SignalR bağlantının kesildiğinden haberdar olduğunda ve yeniden bağlanma moduna geçtiğinde iletiyi görüntülemek için olayı işleyebilirsiniz.

    $.connection.hub.reconnecting(function() {
        notifyUserOfTryingToReconnect(); // Your function to notify user.
    });
    
  • disconnected Yeniden bağlanma girişimi zaman aşımına uğradıklarında iletiyi görüntülemek için olayı işleyebilirsiniz. Bu senaryoda, sunucuyla yeniden bağlantı kurmanın tek yolu, yeni bir bağlantı kimliği oluşturacak olan yöntemini çağırarak Start SignalR bağlantısını yeniden başlatmaktır. Aşağıdaki kod örneği, yalnızca yeniden bağlantı zaman aşımından sonra bildirim gönderdiğinizden emin olmak için bir bayrak kullanır; yöntemin çağrılmasından Stop kaynaklanan SignalR bağlantısının normal sonundan sonra değil.

    var tryingToReconnect = false;
    
    $.connection.hub.reconnecting(function() {
        tryingToReconnect = true;
    });
    
    $.connection.hub.reconnected(function() {
        tryingToReconnect = false;
    });
    
    $.connection.hub.disconnected(function() {
        if(tryingToReconnect) {
            notifyUserOfDisconnect(); // Your function to notify user.
        }
    });
    

Sürekli yeniden bağlanma

Bazı uygulamalarda bağlantı kaybolduktan ve yeniden bağlanma girişimi zaman aşımına uğradıktan sonra otomatik olarak yeniden kurmak isteyebilirsiniz. Bunu yapmak için, olay işleyicinizden Closed (disconnectedJavaScript istemcilerinde olay işleyicisi) yöntemini çağırabilirsinizStart. Sunucu veya fiziksel bağlantı kullanılamadığında bunu çok sık yapmaktan kaçınmak için aramadan Start önce bir süre beklemek isteyebilirsiniz. Aşağıdaki kod örneği, oluşturulan ara sunucuyu kullanan bir JavaScript istemcisi içindir.

$.connection.hub.disconnected(function() {
   setTimeout(function() {
       $.connection.hub.start();
   }, 5000); // Restart connection after 5 seconds.
});

Mobil istemcilerde dikkat edilmesi gereken olası bir sorun, sunucu veya fiziksel bağlantı kullanılabilir olmadığında sürekli yeniden bağlanma girişimlerinin gereksiz pil boşalmasına neden olabileceğidir.

Sunucu kodunda istemcinin bağlantısını kesme

SignalR sürüm 1.1.1'de istemcilerin bağlantısını kesmek için yerleşik bir sunucu API'si yoktur. Gelecekte bu işlevi eklemeye yönelik planlar vardır. Geçerli SignalR sürümünde, istemcinin sunucu bağlantısını kesmenin en basit yolu istemcide bir bağlantı kesme yöntemi uygulamak ve bu yöntemi sunucudan çağırmaktır. Aşağıdaki kod örneği, oluşturulan ara sunucuyu kullanan bir JavaScript istemcisi için bir bağlantı kesme yöntemini gösterir.

var myHubProxy = $.connection.myHub
myHubProxy.client.stopClient = function() {
    $.connection.hub.stop();
};

Uyarı

Güvenlik - İstemcilerin bağlantısını kesmeye yönelik bu yöntem veya önerilen yerleşik API kötü amaçlı kod çalıştıran ele geçirilen istemciler senaryosuna çözüm getirmez çünkü istemciler yeniden bağlanabilir veya ele geçirilen kod yöntemi kaldırabilir stopClient veya ne yaptığını değiştirebilir. Durum bilgisi olan hizmet reddi (DOS) koruması uygulamak için uygun yer çerçevede veya sunucu katmanında değil, ön uç altyapısındadır.