Comet() futtatása JS.
2011-12-04T23:21:33+01:00
2011-12-05T16:05:41+01:00
2022-07-24T08:06:16+02:00
  • Köszi a linket nagyon jó
    Remélem sikerül megoldani a problémát, még próbálkozom meg tanulok. Köszönöm még egyszer.
    Mutasd a teljes hozzászólást!
  • Akkor inkább társalgó és nem tudástár.

    A comet nem egy végtelenített ciklusban fut ami folyamatosan kéri a szervertől az adatokat?

    Nem ez a lényege, hiszen a rendszeres ajax pollozás is végtelen ciklusban kér le adatokat a szervertől. A különbség az, hogy a comet esetében hosszú timeout-tal rendelkező, aszinkron ajax hívásokat kezdeményezel a webszerver felé. A hosszab timeout miatt a kapcsolat nyitva marad és a szervernek esélye van a kapcsolat nyitvamaradása alatt arra, hogy a menetközben bekövetkező változásokról automatikusan értesítse a klienst. Amin befejeződik egy ilyen kapcsolat, a kliens azonnal újabb kapcsolatot nyit a szerver felé.

    Kliens oldalon egy sima ajax-os és egy comet-es alkalmazás között gyakorlatilag semmi különbség sincs. Az igazi különbség a szerver oldalon van.

    A KeepAliveTimeout gondolom azt jelenti hogy ennyi ideig őrizze meg az élő kapcsolatot?
    Az értéke 15 az mp?
    ...
    A Timeout azt jelenti hogy annyi idő alatt be kell hogy töltse az oldalt, különben megszakítja a kapcsolatot vagyis a kérést amit a böngésző küldött neki?


    core - Apache HTTP Server Version 2.2
    Mutasd a teljes hozzászólást!
  • Azért nem próbáltam meg még, mert nem tudom pontosan hogy mi mit jelent.
    Bocsi hogy elkanyarodtam egy kicsit a témától de ha csak ennyi baj lenne akkor nagyon megköszönném a segítséget.
    A KeepAliveTimeout gondolom azt jelenti hogy ennyi ideig őrizze meg az élő kapcsolatot?
    Az értéke 15 az mp?
    A MaxKeepAliveRequests (és értéke) mit jelent pontosan?
    A comet nem egy végtelenített ciklusban fut ami folyamatosan kéri a szervertől az adatokat?
    A Timeout azt jelenti hogy annyi idő alatt be kell hogy töltse az oldalt, különben megszakítja a kapcsolatot vagyis a kérést amit a böngésző küldött neki?

    Előre is köszönöm minden segítséget, de ezeket nagyon fontos lenne megtanulnom!
    Mutasd a teljes hozzászólást!
  • Egy részüket, igen, de ezzel most már nagyon elmegyünk üzemeltetési irányba. De miért nem próbálod ki?
    Mutasd a teljes hozzászólást!
  • Megnéztem.
    /etc/apache2/apache2.conf fájlba ezek a beállítások vannak.

    Timeout 300 KeepAlive on MaxKeepAliveRequests 100 KeepAliveTimeout 15 ## Server-Pool Size Regulation (MPM specific)

    Ezeket kell átállítani?
    Mutasd a teljes hozzászólást!
  • Apache-nál nézd meg a timeout és a KeepAliveTimeout beállításokat.

    Tomcat egy java-s alkalmazás szerver. Sok mindenre való, lehet vele pl. comet-es alkalmazásokat is készíteni, de nem erre találták ki. Meg ha tomcat-et használsz, akkor elfelejtheted a php-t. Tudtommal a tomcat az java-hoz van kitalálva.
    Mutasd a teljes hozzászólást!
  • Köszönöm már kezdem érteni.
    Az vajon elég lenne ha a php.ini -be átállítanám a max_execution_time -ot?
    Az apache config fájljában nem találtam erre utaló dolgokat.
    Van egy bérelt tárhelyem, azon fut rendesen, de van egy saját szerverem is amit én csináltam de ott nem akar futni.

    Gondolom még valami beállítás szükséges. Ettől függetlenül minden más tökéletesen működik a szerveremen.
    A tomcat nem arra való hogy az ilyen ajaxos dolgokat átvegye az apache tól?
    Mutasd a teljes hozzászólást!
  • Tegyünk tisztába egy-két alapfogalmat, mielőtt comet technológiát használunk!

    Azt hallottam hogy vannak szerverek ahol le van tiltva a comet() futtatása.


    Nincs olyan, hogy comet(), ezért nincs olyan szerver, amin tiltva lenne

    Az általad bemásolt kód javascript-ben van, a js az a kliensen fut, azaz a szerver beállítások nem befolyásolják azt, hogy most le van-e tiltva vagy sem.

    A comet elve az, hogy hosszú timeout-tal rendelkező, aszinkron http kérésekkel operál. A szerverek közötti eltérés abban van, hogy a hosszú timeout-tal rendelkező http kéréseket támogatják-e. Az ingyenes/olcsó szolgáltatók nem nagyon fogják.

    A webszerverek max szkript futtatási idejét, illetve a php.ini-ben a hasonló beállítást kell elsődlegesen figyelned. De a php mérsékelten alkalmas comet infrastruktúra kialakítására, mert nem rendelkezik osztott szerver oldali eseménykezelő rendszerrel, ezért csupán annyi történik, hogy a rendszeres pollozás kliens oldalról szerver oldalra kerül át.
    Mutasd a teljes hozzászólást!
  • Vagy valamilyen apache modul kell hogy kezelje a comet -et?
    Mutasd a teljes hozzászólást!
  • Vagy kell egy kimondott Comet szerver?
    Ha telepítem a tomcat -et a szerverre az nem jó?
    Mutasd a teljes hozzászólást!
  • Szerver probléma lesz.
    Feltöltöttem az egészet egy másik szerverre és ott teljesen jól működik.
    Mit kell beállítani a szerveren hogy ez fusson?
    Mutasd a teljes hozzászólást!
  • Üdv!

    Azt hallottam hogy vannak szerverek ahol le van tiltva a comet() futtatása.
    Ez igaz?
    Ennek az ajaxos dolgoknak még nem nagyon ismerem a menetét, de nem tudom mi lehet a probléma a kódommal.
    Itthon simán megy minden, de ha feltöltöm a tárhelyemre már nem megy.
    Gondolom ez lehet a probléma hogy a szerver nem engedi ezt az ajaxot használni?

    <script type="text/javascript"> function scroll(){ var c = document.getElementById('content'); c.scrollTop = c.scrollHeight; setTimeout(scroll,1000); } var Comet = Class.create(); Comet.prototype = { timestamp: 0, url: './backend.php', noerror: true, initialize: function() { }, connect: function() { this.ajax = new Ajax.Request(this.url, { method: 'get', parameters: { 'timestamp' : this.timestamp }, onSuccess: function(transport) { // szerver válasza var response = transport.responseText.evalJSON(); this.comet.timestamp = response['timestamp']; this.comet.handleResponse(response); this.comet.noerror = true; }, onComplete: function(transport) { // küldök egy új ajax kérést amikor ez a kérés befejeződöt if (!this.comet.noerror) // ha valami gond van megpróbál újra kapcsolódni 5mp múlva setTimeout(function(){ comet.connect() }, 5000); else this.comet.connect(); this.comet.noerror = false; } }); this.ajax.comet = this; }, disconnect: function() { }, handleResponse: function(response) { $('content').innerHTML += '<div>' + response['msg'] + '</div>'; }, doRequest: function(request) { new Ajax.Request(this.url, { method: 'get', parameters: { 'msg' : request } }); } } var comet = new Comet(); comet.connect(); </script>

    A kódommal van baj, vagy valami szerverbeállítás kell?
    Előre is köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd