inet:getstat/2的用处
在游戏开发中,client和server之间需要维护一个心跳
,用来检测client的网络异常中断(如突然拔掉网线),进而进行一些清理,保存工作.严谨的服务端,除了确保客户端提交的各种请求都合法,此外还需要限制玩家发包速度
,用来踢掉一些恶意的客户端(如移动加速,攻击重复发包等). 这两个小功能,在Erlang游戏服务器开发中,通过inet:getstat/2可以很容易实现.
首先看看其说明(kernel/inet):
getstat(Socket)
getstat(Socket, Options) -> {ok, OptionValues} | {error, posix()}
获取socket的一个或多个统计信息.
getstat(Socket)等同于getstat(Socket, [recv_avg, recv_cnt, recv_dvi, recv_max, recv_oct, send_avg, send_cnt, send_dvi, send_max, send_oct])(注意在R14B02中这里有一个笔误,send_dvi应该为send_pend).
选项说明:
socket收到数据包的平均大小(字节)
socket收到的数据包总数
socket受到数据包的平均大小偏差
socket收到的最大数据包(字节)
socket收到的总字节数
socket发送数据包的平均大小(节数)
socket发送的数据包总数
socket中待发送数据大小(字节)
socket发送的最大数据包(字节)
socket发送的总字节数
通过间隔的判断recv_cnt,我们可以得知client是否还在"活动",我们不需要处理专门的"心跳"数据包.通过socket的统计信息便可.
通过定期(或随机)的检测recv_cnt, recv_oct,我们可以得知某个client,是否在一段时间内频繁发送数据,是否发送了大量的数据,
从而做一些应对.
下面是在Erlang shell中的调用举例:
> inet:getstat(Socket).
{ok,[{recv_oct,38832},
{recv_cnt,106},
{recv_max,1460},
{recv_avg,366},
{recv_dvi,33},
{send_oct,9896},
{send_cnt,104},
{send_max,574},
{send_avg,95},
{send_pend,0}]}
> inet:getstat(Socket,[recv_cnt, recv_oct]).
{ok,[{recv_cnt,114},{recv_oct,41175}]}
注意:inet:getstat/2的返回值,不要匹配错误 :)
分享到:
相关推荐
iNet 是跨平台服务器开发组件,包括:网络库、消息队列、定时器、RPC、协程库。 地址:https://github.com/IronsDu/accumulation-dev 请参阅测试代码:examples。 特点:跨平台,效率非常高,安全,可复用,...
使用方法: 免安装 只需要设置用户名即可 1 打开 user.reg 文件 将下行所示的 sdkd2006 改为你在 http://windy5157.mfa.cc 网站上注册的用户 "User"="sdkd2006" 2 保存修改后的 user.reg 文件 3 运行 ...
全志R16平台的android6.0.1系统下的RTL8188EU的配置V1.0 2017/5/31 10:30 1、R:\wyb\rtl8188eu_r16m_20161208\android\device\softwinner\astar-evb30\overlay\frameworks\base\core\...注: 某些输入文件使用或覆盖...
OMNet++官网 https://www.omnetpp.org/ INET Framework组件下载页:https://inet.omnetpp.org/Download.html 下载资源很难下载,所以在这里分享下INET 3.6.2组件
源代码是CSDN上一位前辈的,我只做了代码整理和优化,测试...2.udpfd = socket(AF_INET,SOCK_DGRAM,0);//UDP 3.SAMPLE_COMM_VENC_Sentjin(&stStream); 不想下代码的话可以先去这里看看http://www.caterwang.com/?id=23
This is a version of Anders Melander's TGIFImage ported to Delphi 7. It supports animated GIF files in Delphi 7...web: http://home20.inet.tele.dk/tolderlund/delphi/ web: http://finn.mobilixnet.dk/delphi/
inet-2017 IDM-17资源库,用于“ Internet技术”课程需求说明: : 沙盒链接: : 本学期的项目:IDM-17-01: 游戏: : 聊天: : 购物车: : 图书馆: : IDM-17-02: 来自世界各地的食谱书: https : //github....
NULL 博文链接:https://vateran.iteye.com/blog/882696
IPADDR=$(ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}') #环境变量PATH没设好,在cron里执行时有很多命令会找不到 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/...
使用方法:下载2个文件放到一个文件夹内,解压缩,用虚拟机打开Debian。 登录用户名:root ,密码:debian ,输入ifconfig 获取IP地址(第二行inet后内容)。 打开vscode,ctrl+p 打开命令中心,输入 >ssh:connect to ...
NULL 博文链接:https://vateran.iteye.com/blog/883840
WSAStartup(MAKEWORD(2,2),&wsd) 3、创建socket: ReceivingSocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP) 4、初始化服务器地址及监听端口 ReceiverAddr.sin_family=AF_INET //家族 ReceiverAddr.sin_port=htons...
Internet上的SteamBSD安装安装FreeBSD,重新启动PC并以root用户身份登录: su root 从git下载: pkg ins git git clone https://github.com/steambsd/inet cd inet 或下载而不安装git: fetch ...添加权限: chmod +x ...
2.不要忘记为gl-inet选择yes 3.安装后,安装angel beats simpan file ini http://pastebin.com/raw.php?i=e3A7rcFf lalu edit bagian IPYOUHOST alamat script editan_AGB (saya gak host filenya saya gak tau ...
IP=`ifconfig eth0| grep "inet addr" | head -1 | cut -d : -f2 | awk '{print $1}'` ############yum update ,add epel ,add PIIAS source yum_ () { cd /etc/yum.repos.d/ yum install -y wget wget -O /etc/pki...
2. tulip_d1-dragonboard 3. octopus_sch-tina 4. octopus_sch-dragonboard 5. azalea_perf2-tina 6. azalea_perf2-dragonboard 7. azalea_perf3-tina 8. azalea_perf3-dragonboard 9. octopus_dev-...
格式化硬盘恢复数据教程(固态SSD、机械HHD),几个t的学习资料有救了。看到就省下几百块的恢复数据的钱。附详细操作教程CSDN博文和免费软件:...
CI状态主积分构建和指纹测试 功能启用测试用于OMNEST / OMNeT ++的INET框架是为OMNEST / OMNeT ++仿真系统编写的开源通信网络仿真包。 INET框架包含用于众多有线和无线协议的模型,详细的物理层模型,应用程序模型等...
编程范式-DD1361.Inet Labb Inet:互联网/套接字 在这个实验室中,您将纠正和改进 ATM 程序。 要在实验室获得批准,您的程序必须有效、满足某些要求并记录在案。 该实验室的目的是研究面向 Internet 的编程,然后...