Linux服务器网络开发模型
为什么Nginx的性能要比Apache高得多
这主要是因为Nginx使用了最新的epoll(Linux 26内核)和kqueue(FreeBSD)网络I/O模型,而Apache则使用的是传统的select模型。曾在一篇博客上看到有这么个实例:
假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面如果你使用的阻塞IO 模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的现在时代变化了,开始使用多路复用IO模型来处理这个问题你告诉你的朋友来了A号楼找楼管大妈,让她告诉你该怎么走这里的楼管大妈扮演的就是多路复用IO的角色。
解释select和epoll模型的工作方式:
select版大妈做的是如下的事情:比如同学甲的朋友来了,select版大妈比较笨,她带着朋友挨个房间进行查询谁是同学甲,你等的朋友来了。如果每到来一个朋友楼管大妈都要全楼的查询同学,那么处理的效率必然就低下了,过不久楼底就有不少的人了。
epoll版大妈就比较先进了,她记下了同学甲的信息,比如说他的房间号,那么等同学甲的朋友到来时,只需要告诉该朋友同学甲在哪个房间即可,不用自己亲自带着人满大楼的找人了。epoll大妈可以不用吹灰之力就可以定位到同学甲。一看就很明白 epoll和select 模型的区别了吧。
在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在内核源码中 /usr/include/linux/posix_typesh 中
#undef __FD_SETSIZE
#define __FD_SETSIZE 1024
如果想要同时检测1025个句柄的可读状态或 可写状态 ,select是不能实现的。在内核中实现select是使用轮询方法,即每次检测都会遍历所有FD_SET中的句柄,显然,select函数的执行时间与 FD检测的句柄数越多就会越费时。
epoll是多路复用IO(I/O Multiplexing) 中的一种方式,仅用于linux26以上内核。而epoll模型它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体请查看:cat /proc/sys/fs/file-max ,这个数目和系统内存关系很大。
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是"活跃"的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对"活跃"的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有"活跃"的socket才会主动的去调用 callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个"伪"AIO,因为这时候推动力在os内核。在一些 benchmark中,如果所有的socket基本上都是活跃的---比如一个高速LAN环境,epoll并不比select/poll有什么效率,相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN环境,epoll的效率就远在select/poll之上了。
epoll有两种工作模式:Edge Triggered (ET)、Level Triggered (LT)
LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket在这种做法中,内核告诉你一个文件描述符是否就绪了,然后可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表。
ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。
正在验证授权 没有验证!!
问题 没有验证 也就是说 你的M5没有完全打开
解决方法一: 在 setup!txt 里解决 不一定好使 分版本的 建议使用第二种解决方法
setup!txt
[Reg]
;Key=01AC0368564E
LicenseFile=D:\wolServer\freelic
IP=0000
;;;serverAddr=61172200253
;;;ServerPort=63000
Key=0123456789
;;;IP=1921680231
;以下两行不要随便改
ServerAddr=61128194170
ServerPort=63000
[Server]
ServerIndex=0
ServerName=传奇世界
ServerNumber=0
VentureServer=FALSE
还有RunGate/Configini
[GameGate]
Title=传奇世界
ServerAddr=127001
ServerPort=5000
GateAddr=0000
GatePort=7200
ShowLogLevel=3
ShowBite=1
MaxConnOfIPaddr=50
BlockMethod=0
MaxClientPacketSize=7000
NomClientPacketSize=150
MaxClientMsgCount=20
kickOverPacket=1
ServerCheckTimeOut=180000
ClientSendBlockSize=1000
ClientTimeOutTime=5000
SessionTimeOutTime=3600000
SayMsgMaxLen=70
SayMsgTime=1000
LicenseFile=D:\WolServer\freelic
[plug]
LicenceData=2ea8ddks2qr1
解决方法二: 从新下在一个 可以验证的 M5 或者M5验证器
你可以在网上查一下 我就帮你找了一个
建议下载网制:
http://hyuenet/dispbbsaspboardID=44&ID=23221&page=8
如果只是在服务器上设置时,将WIFI信号屏蔽了,可以按原来的设置方法,重新打开设置,将WIFI信号重新打开即可。服务器改密码可以先登录,点击服务器密码修改,输入新密码后保存。
家庭服务器介绍
将外部宽带光纤网络插入猫的WAN口,然后从猫的LAN口引出网线插入到无线路由器的WAN口,给路由器提供网络信号。然后再用网线连接路由器的LAN口和电脑的网络接口。打开电脑的浏览器,访问路由器的设置页面,输入管理帐号和密码一般为admin,以说明书为准进行登录。
登录后进入路由器的设置界面,选择快速设置,根据提示输入宽带光纤网络帐号,密码。然后设置好发射的WiFi信号名称及密码,保存设置,重启路由器即可。
把电源适配器的插头插入U点家庭服务器后面板的电源口,再将电源适配器接入电源插座。安装完毕后,按U点家庭服务器前面板开关按钮,按钮按下,启动U点家庭服务器。
按U点家庭服务器前面板开关按钮,按钮弹起,U点家庭服务器。
指示灯灭,U点家庭服务器关机。红灯闪烁,网关系统故障。红灯常亮,网关掉线且不能再上线。
黄灯闪烁,网关被触发升级或者重置,或出现明确的授权错误。黄灯常亮,服务异常或个别网卡不能获取IP。绿灯闪烁,服务器开机中,服务未就绪。
0条评论