ahoj,chystam se udelat jednoduchy klient a server pro chat. Chtel bych se zeptat jestli to mam udelat jako neblokujici jednovlaknovy,blokujici jednovlaknovy,blokujici vicevlaknovy nebo neblokujici vicevlaknovy. nevim si s tim rady,klient delam v qt a tam je to jasne ale server ve winsock a moc nevim co vybrat.
Fórum › C / C++
Blokujici vs neblokujici funkce chat
Zdravím,
rozhodně je lepší udělat vícevláknový (multithreaded).
Pokud jsem Tě dobře pochopil, tak porozmýšlíš nad asynchronním vs. synchronním? Díky.
takze bude to pro nejvic 500 lidi. Nejlepsi bude udelat vicevlaknovy ze? a ted nevim mam pouzit synchronni nebo asynchronni? kdyz synchronni tak predpokladam ze co klient to vlakno ze? a kdyz asynchronni bude stacit jedno vlakno nebo to mam rozdelit na vic? funkci.. server bude dostavat packety,text ve kterem budou nekolika bajty oddelene ruzne udaje jako druh co ma udelat,od koho se to posila,komu to ma poslat ,samotny text atd. a server bude jenom preposilat.
Winsock nabízí mnoho způsobů používání soketů. Jednak základní blokující (stojí a čeká na data) a neblokující (když jsou přijme, když ne, tak program pokračuje) mód. Dále tu máme asynchronní (informaci např. o příjmu dat dostaneš jako klasickou windows zprávu, kterou si zaregistruješ) a událostní (stejné, jen neposílá zprávu, ale nahazuje event). A asi poslední je podobný způsob jako pro práci třeba se sériovým portem tj. přes overlapped struktury.
Každý způsob má svoje místo. Pro maximálně 500 klientů (a kolik jich bude nejvíce online?) na chatu bych se nebál asynchronního způsobu a windows zpráv. Je to jednoduché a nemusíš nic řešit. A i kdyby si měl vteřinu zpoždění, tak to stejně nepoznáš. Navíc, server s tím nebude dělat žádná kouzla, přijme, zjistí komu to má poslat (nějaká veselá datová struktura), tj. najde ten správný soket a vyfrkne to do něj :).
Případně nechtít vymyslet kolo a použít XMPP aka Jabber :).
prave ze 500 jich bude online. Ani nevim proc nevyuziju xmpp,zda se mi ze by bylo tezsi implementovat xmpp s tim jak je.. velke nez muj primitivni protokol pokud se tomu tak da rikat. Moc dekuju za rady,zatim to vidim na neblokujici rezim. A ucitel mi poradil pouzit mysql a tam ukladat online klienty,myslite ze je to dobra volba?
Je to samozřejmě na tobě. Možná se pletu, ale mě stále přijde asynchronní soket jako to správně řešení pro jednoduchý chat. A ukládat si online klienty do MySQL ... pokud je tím myšleno uložení dvojice jméno/heslo, tak na to ti stačí při tomto počtu i SQLlite. Pokud by si chtěl ukládat i historii chatu, tak potom asi i něco většího (tj. třeba ta MySQL).
mas pravdu asynchronni soket bude nejlepsi volba. Takze bych mel pouzit jak mnozinu socketu ,tak mapu pro vyhledavani tak databazi? nejak nevim.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Neblokujici socket — založil Matej
Neblokující náhrada za ReadFile pro anononymní rouru — založil hlucheucho
Moderátoři diskuze