网游服务器端的数据发送机制的讨论

0 views
Skip to first unread message

benegg

unread,
May 4, 2009, 10:10:40 PM5/4/09
to online_game_dev

网游服务器的数据接收机制讨论得比较多, 但发送机制的讨论就少得多了.

写数据和读数据一样, 都会涉及到超时关闭连接的问题. 但是, 读超时一般在应用层实现, 而不是在传输层实现. 一般的网游协议都会设计心跳机
制. 写超时不适合在应用层实现, 而应该在传输层实现. 数据的发送(写)操作如果处理不好, 会让服务器进程阻塞写操作上.
写操作的层次

1. 应用层写操作

应用层操作只是将数据拷贝到应用层的发送缓冲, 在缓冲未满的情况下总是立即返回. 当出现发送缓冲被填满的情况, 这就涉及到阻塞, 这也是本文的重
点, 在下面讨论.

2. 传输层写操作

一般指socket的write调用. socket也有其自己的发送缓冲, 在缓冲未满的情况下问题立即返回. 当出现socket的发送已满的情况
下, 也会涉及到阻塞.
实现机制:

1. 应用层发送可能出现阻塞的情况

应用层的写方法, 不应该阻塞, 通过出错机制告知发送缓冲已满, 而此时, 写方法的调用者检测到后, 关闭网络连接.

2. 传输层写操作可能出现阻塞的情况

当socket的write调用应该在检测到连接可写时才进行写操作, 保证不会出现阻塞. 但应该实现一种超时机制, 当发现某些数据超过一定时间仍
无法进行发送时, 关闭网络连接.

你现在看的文章是: 网游服务器端的数据发送机制的讨论

------
http://www.benegg.com/?p=26

Reply all
Reply to author
Forward
0 new messages