高并发的服务器有什么模式

高并发的服务器有什么模式,第1张

服务程序最为关键的设计是并发服务模型,当前有以下几种典型的模型:
- 单进程服务,使用非阻塞IO
使用一个进程服务多个客户,通常与客户通信的套接字设置为非阻塞的,阻塞只发生在select()、poll()、epoll_wait()等系统调用上面。这是一种行之有效的单进程状态机式服务方式,已被广泛采用。
缺点是它无法利用SMP(对称多处理器)的优势,除非启动多个进程。此外,它尝试就绪的IO文件描述符后,立即从系统调用返回,这会导致大量的系统调用发生,尤其是在较慢的字节传输时。
select()本身的实现也是有局限的:能打开的文件描述符最多不能超过FD_SETSIZE,很容易耗尽;每次从select()返回的描述符组中扫描就绪的描述符需要时间,如果就绪的描述符在末尾时更是如此(epoll特别彻底修复了这个问题)。
- 多进程服务,使用阻塞IO
也称作 accept/fork 模型,每当有客户连线时产生一个新的进程为之服务。这种方式有时是必要的,比如可以通过 *** 作系统获得良好的内存保护,可以以不同的用户身份运行程序,可以让服务运行在不同的目录下面。但是它的缺点也很明显:进程比较占资源,进程切换开销太大,共享某些信息比较麻烦。Apache 13就使用了这种模型,MaxClients数很容易就可以达到。
- 多线程服务,使用阻塞IO
也称之 accept/pthread_create模型,有新客户来时创建一个服务线程而不是服务进程。这解决了多进程服务的一些问题,比如它占用资源少,信息共享方便。但是麻烦在于线程仍有可能消耗光,线程切换也需要开销。
- 混合服务方式
所谓的混合服务方式,以打破服务方和客户方之间严格的1:1关系。基本做法是:
新客户到来时创建新的工作线程,当该工作线程检测到网络IO会有延迟时停止处理过程,返回给Server一个延迟处理状态,同时告诉 Server被延迟的文件描述符,延迟超时时间。Server会在合适的时候返回工作线程继续处理。注意这里的工作线程不是通过 pthread_create()创建的,而是被包装在专门用于处理延迟工作的函数里。
这里还有一个问题,工作线程如何检测网络IO会有延迟?方法有很多,比如设置较短的超时时间调用poll(),或者甚至使用非阻塞IO。如果是套接字,可以设置SO_RCVTIMEO和SO_SNDTIMEO选项,这样更有效率。
除了延迟线程,Server还应提供了未完成线程的支持。
如有有特别耗费时间的 *** 作,你可以在完成部分工作后停止处理,返回给Server一个未完成状态。这样Server会检查工作队列是否有别的线程,如果有则让它们运行,否则让该工作线程继续处理,这可以防止某些线程挨饿。
典型的一个混合服务模型开源实现ServerKit
Serverkit的这些线程支持功能可简化我们的服务程序设计,效率上应该也是有保证的。
2 队列(queue)
ServerKit提供的队列是一个单向链表,队列的存取是原子 *** 作,如果只有一个执行单元建议不要用,因为原子 *** 作的开销较大。
3 堆(heap)
malloc()分配内存有一定的局限,比如在多线程的环境里,需要序列化内存分配 *** 作。ServerKit提供的堆管理函数,可快速分配内存,可有效减少分配内存的序列化 *** 作,堆的大小可动态增长,堆有引用计数,这些特征比较适合多线程环境。目前ServerKit堆的最大局限是分配单元必须是固定大小。
4 日志记录
日志被保存在队列,有一个专门的线程处理队列中的日志记录:它或者调用syslog()写进系统日志,或者通过UDP直接写到远程机器。后者更有效。
5 读写锁
GNU libc也在pthreads库里实现了读写锁,如果定义了__USE_UNIX98就可以使用。不过ServerKit还提供了读写锁互相转换的函数,这使得锁的应用更为d性。比如拥有读锁的若干个线程对同一个hash表进行检索,其中一个线程检索到了数据,此时需要修改它,一种办法是获取写锁,但这会导致释放读锁和获取写锁之间存在时间窗,另一种办法是使用ServerKit提供的函数把读锁转换成写锁,无疑这种方式更有效率。
除了以上这些功能,ServerKit还提供了数据库连接池的管理(当前只支持MySQL)和序列化(Sequences),如感兴趣可参见相关的API文档。
二、ServerKit服务模块编写
ServerKit由3部分组成:server程序,负责加载服务模块、解析配置文件、建立数据库连接池;libserver,动态链接库,提供所有功能的库支持,包括server本身也是调用这个库写的;API,编程接口,你编写的服务模块和ServerKit框架进行对话的接口。
ServerKit需要libConfuse解析配置文件,所以出了安装ServerKit,还需要安装libConfuse。关于libConfuse可参考 >

点对点技术(peer-to-peer,简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P网络通常用于通过AdHoc连接来连接节点。这类网络可以用于多种用途,各种档案分享软件已经得到了广泛的使用。P2P技术也被使用在类似VoIP等实时媒体业务的数据通信中。

纯点对点网络没有客户端或服务器的概念,只有平等的同级节点,同时对网络上的其它节点充当客户端和服务器。这种网络设计模型不同于客户端-服务器模型,在客户端-服务器模型中通信通常来往于一个中央服务器。

有些网络(如Napster,OpenNAP,或IRC@find)的一些功能(比如搜索)使用客户端-服务器结构,而使用P2P结构来实现另外一些功能。类似Gnutella或Freenet的网络则使用纯P2P结构来实现全部的任务。

历史

P2P架构体现了一个互连网技术的关键概念,这一概念被描述在1969年4月7日第一份RFC文档“RFC1,主机软件”中。而最近,在不用中心索引服务器结构实现多媒体文件交换的背景下,这个概念已经变的非常普遍了。

cs起源模型用法和cs一样我是曾经的AWP的天涯海角我来帮你解决问题
绝CS武器、人物插件安装目录
主题安装:
将下载好的主题复制到Cs\cstrike\resource\background中即可。主题声音安装:
将下载好的音频文件复制到Cs\cstrike\sound\music\或者Cs\cstrike\media中即可。人物模型:
将下载好的文件替换至Cs\cstrike\models\player文件下即可。武器模型:
将下载好的文件替换至Cs\cstrike\models文件下即可。人物声音:
将下载好的文件替换至Cs\cstrike\sound同名文件夹下即可。武器声音:
将下载好的文件替换至Cs\cstrike\sound\weapons文件下即可。

如何安装和修改插件
1>如何修改僵尸插件的名字
打开cstrike\addons\amxmodx\scripting目录
在目录下找到zombie_plaguesma打开
搜索到
formatex(g_modname, sizeof g_modname - 1, "僵尸感染插件 %s",
PLUGIN_VERSION)
其中 "僵尸感染插件 %s"就是插件的名字2>插件音效
依旧是zombie_plaguesma,打开
搜索到// Sound list (randomly chosen, add as many as you want)
下面的一大段就是音效文件,改成你要替换的音效文件的名字
之后把准备替换的音效文件放入声音目录下即可3>插件提示字幕
打开cstrike\addons\amxmodx\data\lang目录
找到zombie_plaguetxt 打开 修改其中的文字 保存 即可4>天气效果的修改
ZP43以前的版本:
打开zombie_plaguesma,搜索
//#define AMBIENCE_RAIN // Rain
//#define AMBIENCE_SNOW // Snow
//#define AMBIENCE_FOG // Fog
去掉前面的斜杠,就开启了其中一个天气效果
ZP43:
打开cstrike\addons\amxmodx\configs目录
找到zombieplagueini打开
找到
[Weather Effects]
RAIN = 0
SNOW = 0
FOG = 1
FOG DENSITY = 00008
FOG COLOR = 210 210 128
1为开启 0为关闭 5>人物模型、管理员模型的修改。
ZP43以前版本:依旧是打开zombie_plaguesma,找到// Player Models (randomly chosen, add as many as you want)这行的下面一段文字就是模型,添加多个模型名字则为在这几个模型中随即使用。ZP43:打开zombieplagueini,找到[Player Models] (randomly chosen if more than one)这行的下面一段文字就是模型,添加多个模型名字则为在这几个模型中随即使用。 6>修改武器模型ZP43以前版本:打开zombie_plague40sma,找到// Weapon Models这行下面一段文字就是武器的模型。ZP43:打开zombieplagueini找到[Weapon Models]下面一段文字就是武器的模型。
修改武器菜单于道具购买菜单ZP43以前的版本:武器菜单打开zombie_plague40sma,找到// Buy Menu: Primary and Secondary Weapons下面一段文字就是武器菜单,可以添加或者取消菜单中的武器。道具菜单找到// Extra Items: Weapons and their costs下面一段文字就是道具菜单,可以修改道具价格,添加道具。ZP43:武器菜单打开zombieplagueini,找到[Buy Menu Weapons]下面一段文字就是武器菜单,可以添加或者取消菜单中的武器。道具菜单找到[Extra Items: Weapons and their costs]下面一段文字就是道具菜单,可以修改道具价格,添加道具。
7>背景音乐
打开zombie_plaguesma,
找到
// Uncomment the following line to enable ambience sounds
//#define AMBIENCE_SOUNDS#if defined AMBIENCE_SOUNDS // Ambience Sounds List (only wav and mp3 formats supported)
// Infection Rounds
new const sound_ambience1[][] = { "zombie_plague/BGMmp3" } // sounds (played randomly)
new const Float:sound_ambience1_duration[] = { 3000 } // duration in seconds of each sound
// Nemesis Rounds
new const sound_ambience2[][] = { "zombie_plague/BGMmp3" }
new const Float:sound_ambience2_duration[] = { 3000 }
// Survivor Rounds
new const sound_ambience3[][] = { "zombie_plague/BGMmp3" }
new const Float:sound_ambience3_duration[] = { 3000 }
// Swarm Rounds
new const sound_ambience4[][] = { "zombie_plague/BGMmp3" }
new const Float:sound_ambience4_duration[] = { 3000 }
// Plague Rounds
new const sound_ambience5[][] = { "zombie_plague/BGMmp3" }
new const Float:sound_ambience5_duration[] = { 3000 }
#endif
找到其中的
// Uncomment the following line to enable ambience sounds
//#define AMBIENCE_SOUNDS
去掉之前的斜杠,即可开启背景音乐第1个是普通模式的音乐
第2个是复仇之神模式的音乐
第3个是幸存者模式的音乐,
第4个是军团模式的音乐
8>僵尸属性的修改
打开zp_zclassessma


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10768702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存