WebHU - Programozási kérdések és válaszok

Ügyfél újracsatlakozása

A (JavaScript) hub-kliensről úgy tudom, hogy ha a kapcsolat megszakad, az „Újracsatlakozás...” fázisba lép, amely megpróbálja újracsatlakozni. Ha ezt nem tudja megtenni, akkor 'Disconnected' állapotba lép, amely addig marad, amíg újrakezdésre nem kéri.

Mennyi ideig tart az „Újracsatlakozás...” fázis, mielőtt feladná? Korábban 40 másodpercet olvastam, de úgy tűnik, hogy a kliensem sokkal kevesebb időt vesz igénybe – körülbelül 10, talán kevesebb is. [SZERKESZTÉS: Nem számít ez a rész, próbaképpen 10 másodperces leválasztást állítottam be a szerveren ...és elfelejtettem. Megértettem, hogy ezt a szerver állítja be a tárgyalás során. Van értelme!] ... Jobban szeretném, ha az ügyfél folyamatosan újra próbálkozna, amíg meg nem mondja, hogy megszakítja – megtehető ez, és problémákat okozna?

Másik kérdés; az Újracsatlakozás... fázisban, ha megpróbálok hívni egy hub metódust (ismét, JS-ben), úgy tűnik, hogy soha nem fejeződik be. A visszaadott Deferred-et használom a „kész” és „sikertelen” események ellenőrzésére, de úgy tűnik, hogy egyiket sem hívják meg. Ez tervezési?

Kösz.

27.02.2013

Válaszok:


1

Biztosan folyamatosan újracsatlakoztathatja.

Kezelje a megszakadt eseményt az ügyfélen, és hívja fel a connect.start:

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

Az egyetlen probléma, amit ez okozhat, az az, hogy potenciálisan végtelen számú kérést indíthat el egy olyan kiszolgálóhoz, amely nem áll rendelkezésre az ügyfélgépekhez. Ez még problémásabbá válik, ha bevezeti a helyzetbe a mobilpiacot (őrülten lemeríti az akkumulátort).

Amikor újracsatlakozás közben megpróbál hívni egy hub metódust, a SignalR megpróbálja elküldeni a parancsot. Mivel 2 csatorna van, egy az adatok fogadására és egy a küldésre, (minden szállításhoz, kivéve a webes socketeket), bizonyos esetekben továbbra is lehetséges a kérések küldése offline állapotban. Ezért a SignalR nem tudja, hogy egy kérés sikertelen-e, amíg a böngésző nem közli vele, hogy nem tudta sikeresen végrehajtani a kérést.

Remélem ez segít!

28.02.2013
  • Az első javítás nagyszerű módja a memóriaszivárgás bevezetésének. 28.02.2013
  • @davidfowl A JavaScript az újracsatlakozáshoz a leválasztáskor? Hogy a fenébe okozna ez memóriavesztést? 08.04.2015
  • @FireLizzard Tekintse meg a bejegyzés történetét stackoverflow.com/posts/15125363/revisions 09.04.2015
  • Ne felejtsen el újra csatlakozni minden olyan csoporthoz az ügyféloldalon, amelyhez már csatlakozott. 20.10.2016

  • 2

    Lehet, hogy van egy tippem... A Web.config megérintésével egy appPool Recycle jön létre, ami azt jelenti, hogy új munkafolyamat jön létre az új kérésekhez, miközben a meglévő folyamat egy ideig folytatódik, amíg a fennmaradó kérések véget érnek vagy el nem érik az időtúllépést. Azok a kérések, amelyek nem érnek véget az időtúllépési időszakban, megszűnnek.

    A Signalr kliens újracsatlakozik az új folyamathoz, miközben a régóta futó feladat a régi folyamatban fut, így ha a régóta futó feladaton

    GlobalHost.ConnectionManager.GetHubContext<ForceHub>();

    valójában kap egy hivatkozást a "régi" hubhoz, miközben az ügyfél csatlakozik az "új" hubhoz. Ez az oka annak, hogy a Wasp által előre elkészített teszt működött: új kérést intézett közzétételre a signalr hubon, amelyet az újonnan létrehozott worker folyamatban dolgoztak fel.

    Megpróbálhat konfigurálni egy singalr hátlapot (https://www.asp.net/signalr/overview/performance/scaleout-in-signalr), nagyon könnyű konfigurálni az Sql Server használatával (https://www.asp.net/signalr/overview/performance/scaleout-with-sql-server). A hátlapnak képesnek kell lennie a két munkafolyamat összekapcsolására, és remélhetőleg megkapja az értesítést az ügyfélen.

    Ha ez a probléma, az új kérések által generált értesítések még a hátlap nélkül is működni fognak. Vegyük észre, hogy a hátlap valódi célja a jeladó méretezése, vagyis egy webszerver-farm összekapcsolása közöttük.

    Ne feledje azt is, hogy az IIS-en belüli, hosszan futó feladatok futtatása ugyanolyan nehéz feladat, mint ahogy többek között az IIS rendszeresen újrahasznosítja az appPool-t, és időtúllépési korlátokkal rendelkezik a végrehajtásra vonatkozó kérésekre. Azt javaslom, hogy olvassa el a következő bejegyzést: http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx „Ha úgy gondolja, hogy maga is meg tud írni egy háttérfeladatot, akkor valószínűleg rosszul fogja. Nem vitatom a képességeidet, csak azt mondom, hogy finom. Ráadásul miért kellene?”

    Remélem ez segít

    12.01.2017
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..