做了五个月的游戏服务端,发现游戏的后端比其他的要求更高。
游戏服务端在运行过程中需要保证连接的实时性,所以要判断客户端连接的实时性,在博客里搜索大概就是三种方案:
1.setsockopt 设置 SO_KEEPALIVE
int flag = 1;
setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,&flag,sizeof(flag));
但这个两个小时才判断一次,肯定不能保证实时性。
2.setsockopt 设置 SO_KEEPALIVE ,更改参数,设置成更短的时间
3.自己写一个心跳机制 heartbeat
23虽然缩短了时间,但是几秒一次也是满足不了实时性的。
就只有用到 epoll_wait 的时候,断开连接会触发 EPOLLIN 的属性:
接收时接收大小为0表示客户端断开(不可能有0数据包触发
EPOLLIN),-1表示异常,针对errorno进行判断可以确定是合理
异常还是需要终止的异常,>0而不等于缓冲区大小表示单次发送结
束。
嗯,这个是可以保证极大的实时性的,完全 ojbk
搞半天这是规定,TCP/IP卷上写的:
结束报文段就是 read 到 0 的消息。
好吧,还是多看书吧