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, botów: 0