1 / 9

网络游戏 服务端编程

网络游戏 服务端编程. 套接字 I/O 模型. Blocking Select WSAAsyncSelect WSAEventSelect Overlapped CompletionPort. 利用 select 函数实现对 I/O 的管理 i nt select( int nfds , // 忽略,保持兼容 fd_set FAR* readfds , // 用于检查可读性 fd_set FAR* writefds , // 用于检查可写性 fd_set FAR* exceptfds , // 用于带外数据

holland
Download Presentation

网络游戏 服务端编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 网络游戏服务端编程 套接字I/O模型

  2. Blocking • Select • WSAAsyncSelect • WSAEventSelect • Overlapped • CompletionPort

  3. 利用select函数实现对I/O的管理 • int select( intnfds, //忽略,保持兼容 fd_set FAR* readfds, //用于检查可读性 fd_set FAR* writefds, //用于检查可写性 fd_set FAR* exceptfds, //用于带外数据 conststructtimeval FAR* timeout // ) fd_set代表一系列特定套接字的集合 Select

  4. Readfds • 有数据可以读入 • 连接已经关闭,重启或终止 • 假如已调用listen而且有一个连接处于搁置状态,那么Accept函数调用会成功 Select

  5. Writefds • 有数据可以发出 • 如果正在对一个非阻塞连接调用进行处理,则连接就成功了 Select

  6. Exceptfds • 假如正在对一个非阻塞连接调用进行处理,连接尝试就会失败 • 有OOB(out-of-band,带外)数据可供读取 Select

  7. Structtimeval{ long tv_sec; //以秒为单位指定等待时间 long tv_usec; //以毫秒为单位指定等待时间 }; Select

  8. 对Fd_set进行处理与检查的宏 • FD_ZERO(* set) //将set初始化成空集合 • FD_CLR(s, * set) //从set中删除套接字s • FD_ISSET(s, * set) //检查s是否为set集合的一名成员 • FD_SET(s, *set) //将套接字s加入集合set中 Select

  9. 使用过程 • 1.使用FD_ZERO宏,初始化自己感兴趣的每一个fd_set • 2.使用FD_SET宏,将套接字句柄分配给自己感兴趣的每个fd_set • 3.调用select函数,然后等待直到I/O活动在指定的fd_set集合中设置好了一个或多个套接字句柄。Select完成后,会返回所有fd_set集合中设置的套接字句柄总数,并对每个集合进行相应的更新。 • 4.根据select的返回值,应用程序便可判断出哪些套接字存在着被搁置的I/O操作—具体的方法是使用FD_ISSET宏,对每个fd_set集合进行检查。 • 知道了每个集合中被挂起的I/O操作之后,对I/O进行处理,然后返回步骤1,继续处理select Select

More Related