Autor Zpráva
koumal
Profil *
Dobrý den,
prosím vás o radu. (1) Potřeboval bych vědět jak funguje javascriptová komunikace mezi serverem a klientem na chatu, konkrétně tady:

Odkaz

Jelikož tato aplikace je dost náročná na počet odesílaných/přijímaných požadavků, zajímalo by mě (2) jestli by serveru nějak ulehčilo, kdyby JS byl napsaný v JQuery. Např. tento soubor mi přijde, že by mohl být pomocí JQuery podstatně kratší, ale nevím nakolik by mělo smysl to předělávat:

Odkaz

3. jakou funkci/funkce mám hledat, když chci najít místo kde script komunikuje se serverem? Konkrétně to že klient říká serveru, aby zaznamenal hlášky/vstupy odeslané klientem. Taky to kde si vyžaduje hlášky/vstupy odeslané jiným počítačem.

Předem dík za radu
Chamurappi
Profil
Reaguji na koumala:
jak funguje javascriptová komunikace mezi serverem a klientem na chatu, konkrétně tady
Jako kdekoliv jinde — hledej AJAX.

jestli by serveru nějak ulehčilo, kdyby JS byl napsaný v JQuery
Samozřejmě, že ne, jQuery je také jen obyčejný JS, žádné voodoo.

tento soubor mi přijde, že by mohl být pomocí JQuery podstatně kratší
Má 66 kB (nepakovaný). Samotné jQuery má 45 kB (nepakované), takže žádné podstatné zkrácení nehrozí. Krom toho už tenhle skript nějaký framework používá, patrně Prototype. Myslím, že by šel napsat bez frameworku tak, aby se dostal pod 50 kB. Nicméně délka skriptu v podstatě nijak nesouvisí se zátěží serveru.

jakou funkci/funkce mám hledat, když chci najít místo kde script komunikuje se serverem?
Prohlédni si všechny výskyty new Ajax.Request.

Konkrétně to že klient říká serveru, aby zaznamenal hlášky/vstupy odeslané klientem.
Patrně doSendMessage.
koumal
Profil *
Díky moc.
koumal
Profil *
Chápu to správně, že tahle metoda (loadChat) spouští javascript, který server pošle klientovy? Jako, že server reaguje na dotaz klienta a pak mu pošle co má dělat... Překvapilo mě, že by to bylo tak jednoduché...

var pfcClient = Class.create();
pfcClient.prototype = {
  loadChat: function() {
    new Ajax.Request(pfc_server_script_url, {
      method: 'get',
      parameters: {pfc_ajax: 1, f: 'loadChat'},
      onSuccess: function(transport) {
        eval( transport.responseText );
      }
    });
  },
koumal
Profil *
Právě jsem se dozvěděl takovou zvláštní věc, tak se chci zeptat jestli mi můžete potvrdit, že je to pravda:

"you don't need to download Prototype: it's included in the distribution. You can include it into your views by putting this into the <head> of your pages:

<%= javascript_include_tag 'prototype' %>
"
Zdroj

Je to pravda? Tak proč to autor zmiňovaných stránek stahuje ze serveru? Myslím ten soubor prototype.js
Chamurappi
Profil
Reaguji na koumala:
Chápu to správně, že tahle metoda (loadChat) spouští javascript, který server pošle klientovy?
Ano.

Právě jsem se dozvěděl takovou zvláštní věc“ … „Je to pravda?
Ta věta v odkázaném článku je pravdivá. Její druhá půlka, kterou tady uvádíš, nedává sama o sobě moc smysl.

Tak proč to autor zmiňovaných stránek stahuje ze serveru?
Neexistuje jiný způsob, jak načíst do prohlížeče JS, než stáhnout ho ze serveru. Příkaz pro Ruby on Rails (což je serverový jazyk), který cituješ, pochopitelně také jen generuje externí <script>. Ale autor phpfreechat.net nejspíš používá PHP, takže příkazy z RoR by mu nechodily.
koumal
Profil *
Jestli se mohu ještě na něco zeptat. Mám sice manuál k prototype a význam metod set() a get() chápu, ale nechápu co má být výsledkem:

  /**
   * Reacte to the server response
   */
  handleResponse: function(cmd, resp, param)
  {
    // display some debug messages
    if (pfc_debug)
      if (cmd != "update")
      {
        var param2 = param;
        if (cmd == "who" || cmd == "who2")
        {
          param2 = $H(param2);
          param2.set('meta', $H(param2.get('meta')));
          param2.get('meta').set('users', $H(param2.get('meta').get('users')));
          trace('handleResponse: '+cmd + "-"+resp+"-"+param2.inspect());
        }


Takže toto mi není jasné:
param2.set('meta', $H(param2.get('meta'))); // z tohoto mám pocit, že příkaz by měl změnit hodnotu prvku pole s názvem klíče meta, a dosatit novou hodnotu, která vlastně odpovídá té staré... to je blbost ne?
param2.get('meta').set('users', $H(param2.get('meta').get('users')));
// no a toto už vůbec netuším o co tu jde
Chamurappi
Profil
Reaguji na koumala:
z tohoto mám pocit, že příkaz by měl změnit hodnotu prvku pole s názvem klíče meta, a dosatit novou hodnotu, která vlastně odpovídá té staré... to je blbost ne?
Hm, vypadá to tak. Podobné nesmysly mohou být důsledkem postupného vývoje a nepozornosti — třeba se v nějaké starší verzi bral jiný klíč než meta, nebo se bral z jiného Hashe než param2
koumal
Profil *
Chtěl bych na tom projektu pracovat, ale nemám žádného "bota" který by mi z druhého počítače mohl posílat vzkazy do otevřených roomu. Adresu svého testovacího projektu zveřejňovat nemohu (není tam login). Ale možná by mi někdo mohl poradit, jak toho bota udělat. Pomocí toho prototypu by to asi nemělo být tak těžké, ale nevím od čeho začít. Je tam seznam ul ze kterého se dají zjistit otevřené kanály. Ale jinak jak zajistit pravidelné přepínání mezi kanály a odesílání...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0