Programiranje Chat sistema podobnega FB

Pozdravljeni mojstri!

Trenutno pišem CHAT sistem za eno stranko ampak sem naletel na en velik problem ki ga rešujem že cel tedn. Zadeva je napisana v PHP + MYSQL + Javascript (ajax pretežno) deluje podobno kod FB Chat z različnimi zavihki. Zadevo imam zasnovano z eno tabelo ki ima nasledne vrstice: "ID, Sender, Reciever, Message, Date". Torej na poslano sporočilo se shrani v vrsto "Sender" id uporabnika ki pošlje sporočilo, v vrstico "Reciever" id uporabnika ki prejema sporočilo. Zdaj seveda na tak način ne morem prikazat zadnjih sporočil in pa shranit trenuten status samega zavihka. Zato sem takoj pomislil da bi ustvaril še eno tabelo z "ID, Sender, Reciever, Status, Date, Lastupdate" potem pa na sporočilih samo uporabil "TAB ID, Date, Message" in pri izpisu bi uporabil le te podatke.

Ampak na tak način pa spet pridem do naslednjega problema da bi se "status" pa "lastupdate" delila z obema uporabnikoma!

Vem da sem spregledal nekaj očitnega ampak se nikakor ne morem spomniti česa, upam da je bilo vprašanje razumljivo.
Prosim za pomoč, Hvala!

13 odgovorov

Mogoče v razmislek, če bo dosti ljudi obešenih na chatu potem se zna zgodit da se ti zabaše server pri takem klasičnem pristopu. Pogooglaj za node.js in podobne zadeve.

22

Ja o tem sem že tudi razmišljal samo ne razumem jezika v katerem node.js deluje saj sem vedno programiral le v PHP in JS. Moral bi malo bolj se poglobit v zadevo ampak za vsoto katero stranka plačuje se ne splača. Chat pa trenutno deluje dokaj enostavno, ima 4 sec interval tako da niti ni na sistemu ki bi čakal na novo sporočilo. Mislim da v takem primeru je še le slabše saj se baza podatkov ogromno obremenjuje z vprašanji ampak stranko to ne moti torej mene tudi ne :)

Če si delal z JS ti node.js ne bi smel delat težav, glede na to da se gre za backend javascript "jezik".

Edit:

Poglej še Meteor.js, bi znalo bit orodje, ki ga iščeš.

1

Nimam pojma kak naj povežem uporabnike z Node.js, shranjujem sporočila v bazo podaktov, itd... Edina prednost uporabe Node.js je da ima Sockets IO in da je hitrejši od Apache ipd. Z vidika programerja, mene, pa se ne splača.

Kod sem omenil v prvem postu imam chat delujoč edini problem mi je shranjevanje datuma zadnjega "focusa" na samem zavihku in shranjevanje statusa zavihka. Ostali sistem je že napisan zato niti ne vidim razloga da zančnem vse skupaj pisat na novo v Node.js.

V node.js zato, ker je lažje.

Tukaj je recimo en chat že spisan: https://github.com/firebase/firechat

Takšna zadeva se mi zdi malo preveč zakomplicirana trenutno. Nisem ravno neki PRO v samem JS-ju in spreminjat objekte in pa funkcije na takšnem velikem Chat-u se mi zdi daleč preveč glede na to da sem le en korak stran od končanega skripta.

Meni se ne zdi tole lažje pa brez zamere. Je tudi kar ogromno več linij kode za določeno stvar ki ni ravno namenjena javnemu klepetu.

Node.js ipd, je rešitev za večje projekte in spletne strani, osebno ne potrebujem takšne implementacije in iščem rešitev le za en sam majhcen problem. Bom pa definitivno raziskal zadevo za v prihodnjost.

P.S.: Polek tega takšne rešitve zahtevajo dodatno gostovanje česar moja stranka ne bi želela.

Kje pa je sedaj tvoja težava?

carli:
Kje pa je sedaj tvoja težava?

Zadevo sem opisal v prvem postu.
Lahko pa jo tudi malo prikažem z izpiski iz baze podatkov da je lažje razumljiva.

Težava je dejansko v sami obliki tabel v bazi podatkov in prikazovanja sporočil iz nje, saj imam 2 uporabnika na vsaki strani (torej vsak zavihek ima 2 uporabnika ki se pogovarjata med seboj). Sam JS pa že imam napisan kot tudi CSS. Zadeva mi trenutno deluje ampak nimam podatkov o statusu zavihka in pa o zadnjem pregledu sporočil da bi prikazal nova sporočila. Iščem način kako shraniti le ta dva podatka za vsakega uporabnika in zavihek.

Ne vem kako imaš spisano.

Ko pošlješ podatke, si še zapomni katere IDje sporočil si poslal in jih posodobi da so že bili poslani, naslednji check pošlji samo podatke, ki še niso poslani.

Ko pride uporabnik ponovno gor, pa preveri zadnja sporočila če ni neposlanih, naloži zadnja dva.

Takšno zadevo imaš z Meteor JS končano v roku ene ure, s tem da tutoriale gledaš dve uri :) Vse je v JS in ti ni treba skrbet za nobene probleme. Verjemi, samo poglej kakšen video.