Autor | Zpráva | ||
---|---|---|---|
koumal Profil * |
#1 · Zasláno: 9. 6. 2010, 09:07:44
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 |
#2 · Zasláno: 9. 6. 2010, 09:24:33
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 * |
#3 · Zasláno: 9. 6. 2010, 09:36:03
Díky moc.
|
||
koumal Profil * |
#4 · Zasláno: 9. 6. 2010, 12:54:52
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 * |
#5 · Zasláno: 9. 6. 2010, 18:13:57
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 |
#6 · Zasláno: 9. 6. 2010, 18:46:52
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 * |
#7 · Zasláno: 9. 6. 2010, 23:26:48
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'))); |
||
Chamurappi Profil |
#8 · Zasláno: 10. 6. 2010, 16:17:58
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 Hash e než param2 …
|
||
koumal Profil * |
#9 · Zasláno: 10. 6. 2010, 17:18:29
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í...
|
||
Časová prodleva: 14 let
|
0