Pulse - asinkroni PHP za dvosmjernu komunikaciju server-client

Naravno da se ne slažem, jer da bi smo utvrdili kako neki uređaj funkcioniše ne možemo samo da ga posmatramo izvana, već moramo tačno da znamo šta je unutra i kako to nešto funkcioniše. A sem toga, kada bi smo Pulse promatrali izvana i merili da li prosleđuje poruke u oba smera, jasno bi smo uz pomoć tog merenja zaključili da Pulse nema dvosmernu komunikaciju, tj. ne šalje poruke u oba smera. U tom merenju bi smo zaključili da Pulse ne može da šalje poruke sa tačke A na tačku B, bez da predhodno tačka B ne pošalje prva njemu poruku. Dakle zaključili bi smo da A samo može da odgovara na pitanja B.

Hahahah ne vidim sada kakve veze ovo pitanje ima sa ovom raspravkom o dvosmernoj komunikaciji, ali trebalo bi da izmerimo puno stvari. Recimo latenciju, propusnost, da li i u kojoj meri gubi pakete, jitter, proveriti koji se protokoli koriste za prenos, sigurnost, potrošnja energie i još puno, puno toga. Ali ono što bi smo takođe trebali da testiramo jeste full duplex. To je test koji bi nam pokazao da li uređaj ima mogćnost da zaista šalje podatke u oba smera ili je ograničen raznim uslovima i radnjama. Pri ovom merenju bi smo jasno zaključili da Pulse nije realna i prava dvosmerna komunikacija već samo simulacija. Dakle ne bi mogao da prođe full duplex test.

Kada bi napravio da Pulse može da ima stalnu vezu i da server šalje informacije prema klijentu bez da klijent pre toga nešto pošalje prema njemu, onda bi smo mogli da kažemo da si uspeo da ostvariš pravu dvosmernu komunikaciju uz pomoć više alata.

Ti što vise pričaš to više pokazuješ da ni osnove stvari ne znaš…

Loš si u pamćenje, itekako sam dosljedan cijelo vrijeme i upravo sam rekao isto što i chatGPT.
Opet ne razlikuješ single ajax short polling od sistema koji bi implementirao frekventni short polling i tako omogućio dvosmjernu komunikaciju.

Svaki short polling je frekventni, ne postoji single ajax short polling… Ti brkaš običan ajax request i short polling. Short polling je tehnika frekventnih single ajax requestova, ja nisam pričao o jednom ajax requestu nego o tehnici koja ih frekventno šalje - i radi po istom principu kao i long polling, samo je kod long pollinga response odložen… Zato se i obe tehnike zovu POLLING. Ajde skoncentriši se malo… Robot ti je pomutio razum :slight_smile:

Ti klijentima kad praviš softver, kad te pitaju izvinite a na koji način funkcioniše i koje ste tehnologije koristili, kažeš posmatrajmo ovaj softver kao black box, bitno je da radi? Baš odlična reklama za tebe :sweat_smile:

Opa Aki, nismo prijavili da smo naučili novu riječ.
S obzirom na dosadašnje razumjevanje pročitanoga, mislio sam da si disleksičan ili tako nešto.
Upravu si ovo za short polling. Vidi čuda, nije tako teško reći da smo se nešto krivo izrazili.

No, to i dalje uopće ne mijenja bit stvari oko koje pričamo.

Mješaš kruške i jabuke. (Al ono, cijelo vrijeme. Mogao si ko voćar bolje raditi)
Naravno da netko ima pravo znati koja tehnologija je korištena… no saznanje toga neće promjeniti izmjerenu funkcionalist i ponašanje aplikacije.
A svaki pristup naravno ima svoje prednosti i mane i s obzirom na situaciju može možda biti optimalan pristup)

Nije pitanje bilo da se ustvrdi kako uređaj funkcionira, nego je bilo da se ustvrdi dali uređaj ima određenu funkcionalnost. Razlika je.

A za ovo drugo je dovoljno ispitati i izmjeriti dali uređaj ima tu traženu funkcionalnost.

Pa Pulse i ima stalnu vezu, koju održava unutar sebe.
Kada pričamo o točkama A i B na razini Pulsea, to su onda točke:
A - Pulse.Clent.sendRecieve
B - Pulse.Server.sendRecieve

I sada kada bi radili mjerenja, ustvrdili bi da nakon što jednom uspostavimo vezu:
Pulse.openConnection()

…da možemo u bilo kojem trenutku pustiti signal na A ili B i da će on izaći na odgovarajući izlaz A ili B.
To nam govori da Pulse unutar sebe održava vezu stalnom i da nam omogućava kontinuiran prijenos signala sa A na B ili obratno, bez da suprotna točka mora slati ikakav signal (opet na promatrane točke A,B) … da bi inicirala da primi poruku.

Ja sam ti baš na to i odgovorila da ako bi smo Pulse gledali sa strane utvrdili bi smo da nema funkciju dvosmerne komunikacije.

Evo to je bio moj odgovor na tvoje pitanje, ali ti izgleda ne vidiš ili se praviš da ne vidiš.

Naravno da pulse nema stalnu vezu, već nakon što klijent pošalje upit serveru i nakon što mu server odgovori veza se prekida. Dakle nije stalna veza kao kod websocketa to je jasno ovo znaju i ptice na grani, čudi me da ti to ne znaš???

To što ti zoveš stalnom vezom to nije prava stalna veza

Sa long pollingom koji si koristio, server ne može da šalje podatke klijentu bez da klijent prvi ne pošalje upit i ne inicira razmenu podataka. Ovo nije ništa novo, ovo su osnovne stvari koje su već dobro poznate i glupo je uopšte i da raspravljamo o tome. To je isto kao da sada počnemo da tvrdimo da kombajn može da leti

Pozdrav!

Evo neko moje misljenje, sto se tice cijele diskusije i same rasprave oko terminologije.

TL;DR kao sto je vec receno, ovo sto si ti implementirao je simulacija dvosmjerne komunikacije.

Ovo sto si ti implementirao moze se smatrati nekom vrstom half-duplexa, sto pojednostavljeno znaci da se komunikacija moze odvijati u dva smjera, ali ne istovremeno. E sad ti se mozes uhvatiti ovoga sto sam napisao u “dva smjera” i reci, pa eto i sam si to rekao da je obostrana komunikacija, ali u biti nije bas tako jednostavno :slight_smile: Kada pricamo o komunikaciji i internet protokolima, stvarnom obostranom komunikacijom se smatra full-duplex (Websocket npr) gdje se poruke izmedju clienta i servera mogu razmjenjivati obostrano istovremeno, bez da razmjena svake poruke mora biti ACKed od strane client-a (to je jedan od razloga zato je WebSocket i izmisljen, je l’).

Dalje, ne moze se porediti WebSocket handshake, gdje se jednom inicira komunikacija, sa long-pollingom gdje sa svakim zaprimanjem response-a, client mora otvoriti novi request prema serveru. Server moze npr imati neke podatke spremne da ih salje clientu, ali ako client iz bilo kog razloga nije zaprimio reponse na vrijeme i poslao novi request prema serveru, server ne moze isporuciti te stvari client-u.

Uglavnom, WebSocket-s je jedini protokol koji moze omoguciti full-duplex obostranu komunikaciju gdje kad se inicijalna konekcija uspostaviti, obe strane mogu slati poruke nezavisno jedna od druge i istoveremeno.

Primjer telefona koji se naveo je u biti full-duplex, a Pulse mi nekako vise ide uz walkie-talkie (ne u potpunosti) ako trebam da navedem neku analogiju, mada ne bih se vodio analogijama iz stvarnog zivota ovdje, jer je moguce stvari preciznije i tacnije objasniti bez njh.

Znaci, simulacija jeste i ako gledas kao korisnik s vana tebi sve djeluje kao da se desava u real-time, ali ako pricamo u HTTP-u, internetu i protokolima onda mozemo sa sigurnoscu reci da ovo nije stvarna obostrana komunikacija.

Sto se tice samog projekta - fina vjezba za uraditi, ali ne vidim razlog za upotrebu za bilo sto ozbiljnije u produkciji. Jedino, ako iz nekog razloga tvoj server ne moze podrzati WS, onda ima smisla, kao i cijeli long-polling koncept.

Nisam iskreno veliki favorit ideje o spremanju state-a na disk direktno zbog toga:

  • sto moze postatiti bottleneck, mada ne znamo o kakvom se trafficu raditi niti kakva je struktura podataka u koju pises na disk
  • ako imas vise instanci servera i ispred neki load balancer, moras onda podesiti neki shared storage sistem gdje ce svaka instanca tvoje aplikacije pisati na isti disk (AWS EBS npr).
2 Likeova

Samo nastavite ovako, puno novih termina sam naučio :smile:

1 Like

Za početak pozdrav, vidim ds te nije bilo dugo.
A što se tiče teme, možda prvo razriješiti jednostavna pitanja? Stvarno ne vidim smisla daljnjem zapetljavanju dok se ne odgovori na ono najprostije … a to je:

Što je “dvosmjerna komunikacija” ? (Izolirano od bilo kakvog konteksta)

Ja nigdje ne spominjem istovremenu dvosmjernu komunikaciju, i sam naglašavam:

Ja sam tako svjestan latencije i kašnjenja koje nastaje u ovakvom obliku dvosmjerne komunikacije, samo se eto ne mogu složiti da nema dvosmjernu komunikaciju sistem koji objektivno i mjerljivo omogućuje komuniciranje u dva smjera.

No da bi to ustvrdili, prvo moramo odgovoriti na pitanje što je to “dvosmjerna komunikacija”, pa tek onda zaključiti dali je neki sistem posjeduje ili ne.

Pa to je već opšte poznatano neka vrsta školske definicije šta je dvosmerna komunikacija bi glasila otprilike ovako: Protokol dvosmerne komunikacije omogućava bidirekcionu razmenu podataka između dva entiteta, gde oba mogu istovremeno slati i primati informacije. S tim što prava dvosmerna komunikacija podrazumeva stalni, bezuslovni prenos podataka u oba smera, dok simulacija dvosmerne komunikacije znači da se prenos odvija naizmenično, bez stvarne simultanosti, kao što je slučaj u nekim protokolima kao što je HTTP ili kod tvog Pulse-a. I nemoj da mi napiše nešto tipa… Pa Pulse ima stalni, bezuslovni prenos podataka u oba smera, jer nema.

Pulse ima stabilnu vezu, unatoč tome što se veza unutar njega periodički prekida i nastavlja.

Evo da pojasnim.
Zamislimo da na udaljenoj galaksiji žive mali zeleni koje mi možemo nazvati posebnim telefonom zvanim LongCaller. Taj telefon radi tako da nađe rutu signala od satelita do satelita i tako se odbija do malih zelenih i mi s njima pričamo. No ima jedna caka, ako dugo pričamo, planete se pomaknu, sateliti uđu u sjenu planeta i signal pukne, veza se prekine.

I ljudima i malim zelenima je jasno da sa LongCaller zapravo ne mogu da dugo pričaju i da vode ozbiljne razgovore, jer taj sistem nema stabilnu vezu.

I onda se jedan pametan čovjek dosjetio i napravio je GalaksyCaller da riješi taj problem.
Pa kako radi GalaksyCaller? … GalaksyCaller radi po istom principu kao LongCaller, samo što paralelno traži više puteva preko satelita do malih zelenih i aktivno drži sve nađene kanale otvorenima. No kako se planeti rotiraju, on periodično gasi jedan kanal i otvara novi kanal kako bi komunikaciju održavao neprekinutom.

E sad, vidimo da je LongCaller baza nad kojom je izgrađen GalaxyCaller i vidimo da iako signali na razini LongCallera se konstantno prekidaju, GalaksyCaller im daje dodatnu vrijednost i konačnu vezu prema malim zelenima drži stabilnom i neprekinutom. Tako ljudi i mali zeleni mogu voditi dugotrajne i stabilne razgovore sa GalaxyCaller.

Naravno, sve dok ne dođe Bruce Lee i kaže im da je to sve prividno, da oni zapravo ne vode dvosmjerne stabilne razgovore, jer LongCaller ne podržava dvosmjerne stabilne razgovore. :smile:

Ok, dvosmjerna komunikacija sporazumjeva da obje strane moraju moći slati istovremeno poruku, no dali ona sporazumjeva da obje strane istovremeno primaju poruku čim druga strana pošalje?

Odgovor je NE, jer na ovom svjetu ne postoji “trenutno”

Znači svojstvo dvosmjerne komunikacije je latencija ili ti kašnjenje poruke. (Gdje se naravno trudimo da je latencija čim manja)

Tako da jasno je da će bolji sistem imati manju latenciju od lošijeg, no lošiji sistem i dalje omogućava dvosmjernu komunikaciju unatoč većoj latenciji.

Zar ne?

Ovo je isto kao da čoveku bez nogu kažeš, ti imaš noge, unatoč tome što ih zapravo nemaš i što si ih izgubio u ratu kada si nagazio na minu, u tvojim mislima ti ih i dalje imaš.

Ma ti dvosmernu komunikaciju i možeš samo da zamišljaš, mene si našo da zajebavaš ??? :joy: :crazy_face:

Jel može server kod tebe da radi ovako: klijent pošalje serveru upit, server mu odgovori, veza ostane upaljena, klijent ne šalje više nove upite, a server klijentu pošalje još 10 poruka koje nisu vezane za prvi upit koji je klijent poslao ??? E odgovori mi na ovo jednostavno pitanje ???

Prosto sam zadivljen da nitko u ovoj temi do sad ne može da stvari promatra hijerarhijski. Da se distancira od karakteristike djelova cjeline, dok promatra cjelinu i njene karakteristike. Nije džabe filozofija iznjedrila " Cjelina je VEĆA od zbroja njenih djelova"

Btw. dao sam ti jako lijep primjer po čemu se razlikuje stabilna veza na razini parent-sustava i child-sustava, gdje parent-sustav može zadržati vezu sa ciljem, bez obzira što ona puca na razini child-sustava. Na tebi je hoćeš li si dati truda shvatiti.
Makni ironiju sa lica i ponos što će se kositi sa tvojim maločas uvjerenjem i shvatit ćeš sa lakoćom. Ili odaberi tabor neobranjivih stavova, pa nećeš smjeti ko BrusLi da više donosiš ni zaključke o tome jel se može na mobitel pričati, a da ne uđeš u kontradiktornost sa ranije krivim postavljenim tvrdnjama…

Dvosmerna komunikacija ne mora da podrazumevata da obe strane istovremeno primaju poruku čim druga strana pošalje. Dvosmernost se odnosi na mogućnost da obe strane mogu slati i primati poruke, ali to ne znači nužno da se oba procesa dešavaju u isto vreme za oba entiteta.

Prava dvosmerna komunikacija obuhvata simultano slanje i prijem podataka, ali redosled prijema može biti različit, dok je kod tebe naizmeničan. Na primer, u protokolima kao što je TCP, jedna strana može poslati podatke, a druga ih može primiti, ali primanje neće nužno biti trenutni odgovor na slanje. Dakle, prava dvosmerna komunikacija omogućava istovremeno slanje podataka u oba smera, ali ne garantuje da će poruke biti primljene odmah nakon slanja. Ne možeš meni da postavljaš takva trik pitanja.

Pusti ti brus lija i moje zakljucke, vrati se ti na temu i objasni sta si ti to ovde napravio sto ne postoji 20 godina vec? I zasto pravis click bait postove i teme, da mi ovde gubimo vreme samo? Necu da pricam o telefonima, ljudima koji se bodu stapovima, vanzemaljcima, zato i ne odgovaram…

Nisam ja ironična, nego ti pokušavaš da me ubediš u nešto za šta jako dobro znam da nije istina. I nisam ja odabrala nikakav tabor i na početku sam te pohvalila da si lepo rešio mnoge probleme i dalje stojim iza toga, ali ti sada tvrdoglavo pokušavaš da nas ubediš u nešto, za šta svi znamo da nije tako. I to nešto nije nešto nepoznato, već jako poznata i prosta stvar i nema potrebe da se o tome raspravlja, to se uči kao tablica množenja i već davno ima svoju prostu definiciju.

Naravno da može! Mogu slati i paralelno poruke i koliko god poruka. Veza ostaje živa čak i nakon što klijent ispadne offline neko vrijeme.
A cijelo vrijeme dok je offline, server može i tada slati poruke, koje neće biti izgubljene, ali će biti isporučene tek kada se client opet pojavi online.

Doduše našao sam glitch kada opteretim sustav baš sa masom paralelnih poruka istovremeno sa obje strane, onda mi naraste latencija. Ali smislio sam rješenje za to i sada radim na tome. Očekujem tu dodatnu latenciju koja nastaje svesti na ravno 0.

Sam debuging se isto masu zakomplicirao i zadnja dva dana sam pravio samo konzolu za debugiranje, brutalno je ispala :smiling_face_with_three_hearts:
Evo slikica:

Inače da nebi bilo da nisam svjestan ograničenja, naravno da ih ima.

Single ajax request je reda veličine 50ms na lokalnoj mreži, dok je sa TCP na websocketu reda veličine 1ms.

Moja komunikacija tako ima latenciju 50ms (na lokalnoj mreži), dok je kod websocketa latencija 1ms.

To jeste velika razlika za neke primjene, ali za neke druge primjene je to isto tako zanemarivo.

Pored te razlike, ja na razini Pulse sistema imam stabilnu vezu za dvosmjernu razmjenu poruka, koja preživljava čak i odlazak clienta u offline.

Hoćete li vi to zvati dvosmjerns komunikacija ili ne, baš me zaboli ona stvar. No izrazito mi je smješno (u neku ruku i zabavno) da sistem koji objektivno i mjerljivo omogućava razmjenu poruka u oba smjera vi karakterizirate sistemom koji ne omogućava dvosmjernu komunikaciju. Sorry, ali meni je to kategorija “lud, zbunjen, nenormalan”

Ti si opet grdo pomješao kruške i jabuke. Velim ti, karijera voćara bi ti sigurno išla.

Ta nigdje ja ne tvrdim da sam napravio nešto novo. Gdje, kad?

Ja samo rekoh da sam napravio sistem koji omogućava dvosmjernu komunikaciju.

I ok, budala sam što se trudim tebe uvjeriti da taj sistem omogućava dvosmjernu komunikaciju, dok ti tako tvrdoglav tvrdiš da sistem koji omogućava slanje poruka u oba smjera, zapravo nema dvosmjernu komunikaciju.

Fali mi onaj Lav iz vica … koji je kaznio vuka jer je uvjeravao Magarca da je trava zelena, a ne žuta.

Ok, ti kažeš da Pulse ima dvosmernu komunikaciju. Ali zamisli sada da za večeru imamo streljano prase :pig2: :pig_nose: u sosu od pohovanog jazavca :skunk: koji je silovan pa je nakon toga izudaran bejzbol palicom do smrti i na kraju zaklan kao svinja. S obzirom da je prase streljano kakve veze to ima sa biopolarnim i kataklizmičnim procesima u svemiru. Jer jasno je da magnetna polja crne rupe i kvantno molekulni sastojci nikako ne mogu da utiču na geomagnetne događaje u samoj večeri.

E na ovaj način ti razgovaraš sa nama, jel to lepo ???

1 Like