Koncepcja serwera czatu

0

Yo

Problem jest taki - w jaki sposób napisać sobie serwer czatu.
Generalnie z funkcjami nie ma problemu, chodzi o sam fakt np. nasłuchiwania połączeń.
Kod typu:

static void Main() { new ChatServer(); } public ChatServer() { Thread read = new Thread(new ThreadStart(ReadPackets)); read.Start(); TcpListener chatServer = new TcpListener(IPAddress.Parse("jakiesip"), 9500); chatServer.Start(); while (true) { if (chatServer.Pending()) { TcpClient chatConnection = chatServer.AcceptTcpClient(); DoCommunicate comm = new DoCommunicate(chatConnection); } } Console.ReadLine(); } ``` zżera mnóstwo pamięci (to nieszczęsne while(true) na procu zabiera mi 50% ?) Jakieś propozycje? Dzięki z góry.</cpp>
0

Jest jeszcze rozwiązanie Thread.Sleep(10) przy każdym wykonaniu pętli...

0

Kiedys mi sie nudzilo i napisalem serwer chatu na web servisie ;) moze troche glupie ale nawet sie sprawdzalo :P niestety podlaczony klient co sekunde musial sprawdzac czy nic nowego nie przyszlo :P Ale z drugiej strony... mozna by napisac jeden web service, ktory przyjmuje komunikaty, a drugi, ktory juz laczy sie bezposrednio z klientem (o ile to aplikacje windowsowe) i wysyla do nich reply :P no ale to troche smieszne rozwiazanie :P (moj chat byl tylko po to bym sie ajax'a troche poduczyl).

Niestety z remotingiem duzo sie nie bawilem... ale chyba byla jedna metoda, ktora po prostu czekala na jakis komunikat. Jak ja znajdziesz to daj znac, przyda sie na przyszlosc ;)

0

Nie sprawdzaj czy 'Pending' tylko od razu wywołaj 'AcceptTcpClient' który poczeka aż ktoś będzie. Przydałoby się to wpakować w osobny wątek, żeby nie blokować aplikacji, albo użyć takiej konstrukcji:

while(!koniec)
{
                    TcpClient chatConnection = chatServer.AcceptTcpClient();
                    //tu dodajesz klienta do listy klientów
                    Application.DoEvents();
}
0

Application.DoEvents() to raczej bym proponowal stosowac, gdy sie nie ma pojecia o watkach, bo to dosyc brzydki sposob i w tym przypadku moze dac dziwne rezultaty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1