游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1843|回复: 3

[IOCP]能否用定长数组存储服务器所使用的重叠数据???

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-1-30 18:43:00 | 显示全部楼层 |阅读模式


  1. // IO重叠数据
  2. struct SOverlappedData
  3. {
  4.     OVERLAPPED    m_Overlapped;
  5.     SOCKET        m_Socket;
  6.     int            m_IOEvent;                // IOEVENT_XXX
  7.     char        m_Data[DATA_LENGTH];    // 实际的数据缓冲区
  8. };
复制代码


服务端需要经常投递AcceptEx,WSARecv以及WSASend重叠数据,
假如服务器设定的最大在线人数是5000,那么,我想最多只需要10000个SOverlappedData结构体,是吧?

因为,对于每一条连接,最多只需要2个SOverlappedData数据块,即1个用于WSARecv,另1个用于WSASend.
那么这样的话,一个定长数组就可以存储这些重叠数据了,而我所看到的别人写的代码,都是用的动态增长的内存池,设计的非常复杂,我觉得很没必要。

我描述的对么??

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-1 10:27:00 | 显示全部楼层

Re:[IOCP]能否用定长数组存储服务器所使用的重叠数据???

已解决.


答案:
大多数人的建议是:
最好每次等到WSASend或WSARecv传输全部完成,再进行下一次投递操作,这样就不需要多个重叠数据块了。
即每个连接只需要1个WSASend重叠数据块和1个WSARecv重叠数据块,
那么定长数组就是可以的,因为游戏的在线人数往往是设定好的。

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2012-2-2 16:23:00 | 显示全部楼层

Re:[IOCP]能否用定长数组存储服务器所使用的重叠数据???

投递前的数据放哪里?

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-3 09:20:00 | 显示全部楼层

Re: Re:[IOCP]能否用定长数组存储服务器所使用的重叠数据???

yahle: Re:[IOCP]能否用定长数组存储服务器所使用的重叠数据???

投递前的数据放哪里?


每次发包的时候,会将包数据压入队列,然后依次取出投递.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 11:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表