Profilo di 耘芃不凡之星辰FotoBlogElenchiAltro Strumenti Guida
31/10/2009

《还没有决定名字的网络游戏》开发记录

今天把多人聊天的demo完成了,运行服务器端的程序之后,用户就可以使用客户端程序连接服务器,并和其他连接到服务器的客户端进行通信。
服务器接收客户端发来的消息,对其进行一些处理后再发送给其他客户端;客户端接受用户键盘输入的消息,将它发送给服务器,再从服务器接收来自其他客户端的消息,并把它显示在屏幕上。

到这里,关于网络连接、通信这些基础技术的尝试已经完成。接下来要做的是针对如何实现某些特殊的功能,进行进一步尝试。
下一个demo,我想重点考虑如何实现让多个玩家在同一个场景中互动。demo可以做成一个“玩家们在迷宫中探险”这样的小游戏。

对于多线程,我仍然有不少地方不明白。这次的问题是CPU的占用率。
我在服务器端的主线程中使用了一个while循环,在每一次循环中程序遍历所有与服务器相连的客户端,从这些客户端接收消息,再将服务器处理过的消息发送给客户端。消息的接收和发送都是以多线程的方式异步完成的。然后我运行这个服务器端程序,CPU占用率直接升到50%。
接着我换了一种代码的写法。我把刚才的整个while循环剪切粘贴到一个叫Update的函数中,然后新建一个线程,让这个线程去执行Update函数。而在主线程中,我还是写了一个while循环,但在这个while循环里,我放的是类似这样的代码:
String str = Console.ReadLine();
if (str.Equals("quit"))
{
    break;
}
ReadLine是一个同步函数,他在读取到用户输入之前会阻塞当前线程。程序用这个函数读取用户输入后判断这个输入是否是字符串quit,如果是则退出循环,中止程序。然后我再次运行程序,奇怪的是,这一次CPU占用率完全没有明显的提升,和平时一样在5%以下波动。

第二种代码的写法和第一种相比,不但没有减少程序的工作量,甚至还增加了一点东西,但是CPU占用率反而变低了。这到底是何解?
我不记得是下学期还是明年,我们会有Concurrency这门课(我也不知道这个词该怎么翻译,大概就是“并行”之类的意思),也许到时候我能对多线程有更好的了解。

Commenti

Attendere...
Il commento immesso è troppo lungo. Immetti un commento più breve.
Immissione non effettuata. Riprova.
Impossibile aggiungere il commento al momento. Riprova più tardi.
Per aggiungere un commento è necessaria l'autorizzazione di un genitore. Chiedi autorizzazione
I tuoi genitori hanno disattivato i commenti.
Impossibile eliminare il commento al momento. Riprova più tardi.
Hai raggiunto il numero massimo di commenti pubblicabili giornalmente. Riprova tra 24 ore.
Impossibile lasciare commenti. La funzionalità è stata disattivata perché i sistemi hanno rilevato una possibile attività di spamming dal tuo account. Se ritieni che il tuo account è stato disattivato per errore, contatta il supporto tecnico di Windows Live.
Esegui il seguente controllo di protezione per completare la pubblicazione del commento.
I caratteri digitati nel controllo di protezione devono corrispondere ai caratteri dell'immagine o della riproduzione audio.

Per aggiungere un commento, accedi con il tuo Windows Live ID (se utilizzi Hotmail, Messenger o Xbox LIVE possiedi già un Windows Live ID). Accedi


Non hai ancora un Windows Live ID? Registrati

Riferimenti

L'URL di riferimento per questo intervento è:
http://argoran.spaces.live.com/blog/cns!368851DC9D62C39D!5316.trak
Blog che fanno riferimento a questo intervento
  • Nessuno