1 / 12
文档名称:

网络游戏制作技术.doc

格式:doc   大小:71KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

网络游戏制作技术.doc

上传人:phljianjian 2017/7/26 文件大小:71 KB

下载得到文件列表

网络游戏制作技术.doc

相关文档

文档介绍

文档介绍:网络游戏制作技术
[b]网络游戏制作技术(一)[/b]
当今网络游戏在中国大陆已经在大范围的蔓延,暂且不论这样的一种趋势会带来什么样的游戏产业趋势。这里只就网络游戏的制作和大家进行交流,同时将自己的制作经验写处理,希望为中国的游戏业的发展做出一点点的贡献。。
网络游戏的程序开发从某种意义上来看,最重要的应该在于游戏服务器端的设计和制作。对于服务器端的制作。将分为以下几个模块进行:






现在就网络中的通信模块处理谈一下自己的看法!!
在网络游戏客户端和服务器端进行交互的双向I/O模型中分别有以下几种模型:
1. Select模型
2. 事件驱动模型
3. 消息驱动模型
4. 重叠模型
5. 完成端口重叠模型。
在这样的几种模型中,能够通过硬件性能的提高而提高软件性能,并且能够同时处理成千上百个I/O请求的模型。服务器端应该采用的最佳模型是:完成端口模型。然而在众多的模型之中完成端口的处理是最复杂的,而它的复杂之处就在于多服务器工作线程并行处理客户端的I/O请求和理解完成端口的请求处理过程。
对于服务器端完成端口的处理过程总结以下一些步骤:
1. 建立服务器端SOCKET套接字描述符,这一点比较简单。
例如:
SOCKET server_socket;
Server_socket = socket(,SOCK_STREAM,0);

Const int SERV_TCP_PORT = 5555;
struct sockaddr_in server_address.
memset(&server_address, 0, sizeof(struct sockaddr_in));
= ;
= htonl(INADDR_ANY);
= htons(SERV_TCP_PORT);
//绑定
Bind(serve_socket,( struct sockaddr *)&server_address, sizeof(server_address));
2. 对于建立的服务器套接字描述符侦听。
Listen(server_socket ,5);
3. 初始化我们的完成端口,开始的时候是产生一个新的完成端口。
HANDLE hCompletionPort;
HCompletionPort = pletionPort(NULL,NULL,NULL,0);
4. 在我们已经产生出来新的完成端口之后,我们就需要进行系统的侦测来得到系统的硬件信息。从而来定出我们的服务器完成端口工作线程的数量。
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
在我们知道我们系统的信息之后,我们就需要做这样的一个决定,那就是我们的服务器系统该有多少个线程进行工作,我一般会选择当前处理器的2倍来生成我们的工作线程数量(原因考虑线程的阻塞,所以就必须有后备的线程来占有处理器进行运行,这样就可以充分的提高处理器的利用率)。
代码:
WORD threadNum = system_info. DwNumberOfProcessors*2+2;
for(int i=0;I<threadNum;i++)
{
    HANDLE hThread;
    DWORD dwthreadId;
    hThread = _beginthreadex(NULL,ServerWorkThrea,  (LPVOID)hCompletePort,0,&dwthreadId);
    CloseHandle(hThread);
}
CloseHandle(hThread)在程序代码中的作用是在工作线程在结束后,能够自动销毁对象作用。
6. 产生服务器检测客户端连接并且处理线程。
HANDLE eptThread;
DWORD dwThreadId;
eptThread= _beginthreadex(NULL,AcceptWorkThread,NULL, &dwThreadId);
CloseHandle(eptThread);
,在线程处理之前我们必须定义一些属于自己的数据结构体来进行网络I/O交互过程中的数据记录和保存。
首先我要将如下几个函数来向大家进行解析:
1.
HANDLE