魔兽世界二区格瑞姆巴托是什么服
二区格瑞姆巴托原为网通服务器。
服务器性质:PVP
CTM大服务器合服后,基本再无网通电信说法,全服务器都可以连接不卡。
格瑞姆巴托服务器介绍:
自上次更新时间以来,该服务器5343联盟,5685部落,阵营比例非常平衡。
种族和其他服务器基本一样,联盟人类一家独大,部落血精灵略高,其余平均。
国服 - 格瑞姆巴托 人数最多联盟公会
排名 公会名称 人数
1 Twinkle 291
2 zixia 205
3 xjtu 156
4 Encorelala 146
5 恶魔之魂 144
6 璀璨圣域 121
7 浮士德的传奇 109
8 九仞 100
9 dragonsoul 81
10 殇丶会 69
国服 - 格瑞姆巴托 人数最多部落公会
排名 公会名称 人数
1 焱淼 183
2 一杀戮一 163
3 绝美的星光 156
4 风飘缘随 153
5 Addicted 144
6 灬四合院灬 132
7 皇朝 117
8 ZOO 109
9 奥杜尔传奇之矛 104
10 荣耀之魂 92
该服务器是一个不错的服务器,即便是在有些萧条期的今天,也可以保证不错的上线率和阵营人口比例,可以说是缩小版的安苏。
我们现实生活中的协议是指相互遵守的规定,单方面违背,协议不成立。
而在互联网交互的过程中,也存在这许多协议,例如 FTP、HTTP、STMP、TCP/IP 等。
而 HTTP 协议则是 web 服务器 和 web 客户端 达成的一种可靠的数据传输协议,通过 HTTP 可以从遍布全世界的 Web 服务器上将 JPEG ,HTML 页面,文本文件,MPEG **,WAV 音频文件和其他资源信息块迅速、便捷、可靠地搬移到人们桌面上的 Web 浏览器上去。它能够确保数据在传输的过程当中不会损坏或者产生混乱。这样,对用户来说是个好事,同样对 Internet 应用的开发人员来说也是一件好事。因为我们在开发过程中也不需要担心自己的页面和数据会在传输过程中发生破坏和畸变了。
Web 内容都是 存储在 Web 服务器 上的。Web 服务器所使用的是 HTTP 协议,因此经常会被称为 HTTP 服务器。这些 HTTP 服务器存储了因特网中的数据,如果 HTTP 客户端发出请求的话,它们会提供数据。客户端向服务器发送 HTTP 请求,服务器会在 HTTP 响应中回送所请求的数据。
那么一次请求和响应的过程中发生了什么?
web 服务器是 web 资源的宿主 ,而 web 资源就是我们常见的 web 内容的源头,最简单的 web 资源就是我们服务器中的静态文件:文本文件,HTML 文档,JPEG 文件,AVI 文件等等。
当然 web 资源也可以是动态生成的,类似搜索引擎生成的页面,QQ 空间的动态等,总之,所有类型的内容来源都是资源。
因特网上有数千种不同类型的数据类型,HTTP 在传输的过程中为每个传输的数据都打上了名为 MIME 类型的数据类型标签,描述并标记多媒体内容。
web 浏览器请求一个网站的时候往往会发布 多个 HTTP 请求 ,比如我们在浏览一个具有丰富的的 web 页面的时候,浏览器会执行一次 HTTP 请求来获取描述页面布局的 HTML,然后发布另外的请求来获取每个嵌入式的,这些甚至可能位于不同的服务器上。因此,一个 web 页面通常不是单个资源,而是一组资源的集合。
web 服务器会为所有的 HTTP 对象数据附加一个 MIME 类型 ,当浏览器从服务器中取回一个对象的时候,会查看相关的 MIME 类型。看看它是否知道应该如何处理这个对象。对象的类型写在响应的 content-type 头 中;同样,请求的时候浏览器也会告知服务器请求数据类型。
常见的 MIME 类型:
以 application 开头的媒体格式类型:
MIME 参考手册: W3school MINE类型
大部分 URL 都遵循一种标准格式, 这种格式包含三个部分。
URI = Uniform Resource Identifier 统一资源 标志符
URL = Uniform Resource Locator 统一资源 定位符
URN = Uniform Resource Name 统一资源 名称
翻译成人话: URI 是抽象的定义,不管用什么方法表示,只要能定位一个资源,就叫 URI,本来设想的的使用两种方法定位。
1)URL 用地址定位
2)URN 用名称定位
举个例子:去村子找个具体的人(URI)。如果用地址:某村多少号房子第几间房的主人就是 URL, 如果用身份证号 + 名字,去找就是 URN 了。
目前 WEB 上就 URL 流行开了,平常见得 URI 基本都是 URL。
1)HTTP 和 HTTPS 的相同点
2)HTTP 和 HTTPS 的不同之处
3)如何选择 HTTP 和 HTTPS 协议
HTTP 支持几种不同请求和命令,这些命令被称为 HTTP 方法,每条 HTTP 请求报文都包含一个方法。 这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、发送一段信息、删除一个文件等)。
请求方法如下:
状态码分成如下几个系列:
常见的 HTTP 状态码:
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。
HTTP 报文包括以下三个部分:
以上内容复制自: http://wwwcnblogscom/Joans/p/3956490html
使用火狐和 chrome 浏览器打开一个网页,找到其中一个网络请求查看报文。
1)协议
2)域名
3)接口版本控制规范
格式规范如下:
更新版本后可以使用 v2、v3 等依次递加。
4)接口路径规范
格式规范如下:
5)接口命名规范
格式规范如下:
6) HTTP 请求方法
格式规范如下:
GET https://apixxxxxcom/v1/zoos :列出所有动物园
POST https://apixxxxxcom/v1/zoos :新建一个动物园
GET https://apixxxxxcom/v1/zoos/ID :获取某个指定动物园的信息
PUT https://apixxxxxcom/v1/zoos/ID :更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH https://apixxxxxcom/v1/zoos/ID :更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE https://apixxxxxcom/v1/zoos/ID :删除某个动物园
GET https://apixxxxxcom/v1/zoos/ID/animals :列出某个指定动物园的所有动物
DELETE https://apixxxxxcom/v1/zoos/ID/animals/ID :删除某个指定动物园的指定动物
注意:修改有两个方法 PUT 和 PATCH。
假设 URL 位置有一组数据 UserInfo,包括 UserID、UserName 等 20 个字段
需求:用户修改了 UserName,其他不变
• 采用 PATCH,仅向 URL 提交 UserName 的局部更新请求
• 采用 PUT,必须将所有 20 个字段一并提交到 URL,未提交字段被删除
PATCH 的最主要好处:节省网络带宽
7)接口信息过滤
格式规范如下:
limit=10:指定返回记录的数量
offset=10:指定返回记录的开始位置。
page=2&per_page=100:指定第几页,以及每页的记录数。
sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复。比如, GET /zoo/ID/animals 与 GET /animalszoo_id=ID 的含义是相同的。
8)请求参数规范
9)接口返回数据
格式规范如下:
status::接口的执行状态
data:接口的主数据
msg:返回成功或者失败的错误信息
返回数据中的状态码、状态信息,常指具体的业务状态,不建议和 HTTP 状态码混在一起。HTTP 状态,是用来体现 HTTP链路状态情况,如:404-Not Found。HTTP 状态码和 JSON 结果中的状态码,并存尚可,用于体现不同维度的状态。
简单的功能如下:
这里不牵扯到任何 Python 和 Pycharm 的教学,不会的童鞋挪步 Python 开发教程。
参考新浪开放平台 https://openweibocom ,基本是国内最为标准的 API 文档之一。
1 利用节点名称的唯一性来实现共享锁
ZooKeeper抽象出来的节点结构是一个和unix文件系统类似的小型的树状的目录结构。ZooKeeper机制规定:同一个目录下只能有一个唯一的文件名。例如:我们在Zookeeper目录/test目录下创建,两个客户端创建一个名为Lock节点,只有一个能够成功。
算法思路: 利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户端都获得锁。
基于以上机制,利用节点名称唯一性机制的共享锁算法流程如图所示:
该共享锁实现很符合我们通常多个线程去竞争锁的概念,利用节点名称唯一性的做法简明、可靠。
由上述算法容易看出,由于客户端会同时收到/test/Lock被删除的通知,重新进入竞争创建节点,故存在"惊群现象"。
使用该方法进行测试锁的性能列表如下:
总结 这种方案的正确性和可靠性是ZooKeeper机制保证的,实现简单。缺点是会产生“惊群”效应,假如许多客户端在等待一把锁,当锁释放时候所有客户端都被唤醒,仅仅有一个客户端得到锁。
2 利用临时顺序节点实现共享锁的一般做法
首先介绍一下,Zookeeper中有一种节点叫做顺序节点,故名思议,假如我们在/lock/目录下创建节3个点,ZooKeeper集群会按照提起创建的顺序来创建节点,节点分别为/lock/0000000001、/lock/0000000002、/lock/0000000003。
ZooKeeper中还有一种名为临时节点的节点,临时节点由某个客户端创建,当客户端与ZooKeeper集群断开连接,则开节点自动被删除。
利用上面这两个特性,我们来看下获取实现分布式锁的基本逻辑:
客户端调用create()方法创建名为“locknode/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“locknode”)方法来获取所有已经创建的子节点,同时在这个节点上注册上子节点变更通知的Watcher。
客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,那么就认为这个客户端获得了锁。
如果在步骤3中发现自己并非是所有子节点中最小的,说明自己还没有获取到锁,就开始等待,直到下次子节点变更通知的时候,再进行子节点的获取,判断是否获取锁。
释放锁的过程相对比较简单,就是删除自己创建的那个子节点即可。
上面这个分布式锁的实现中,大体能够满足了一般的分布式集群竞争锁的需求。这里说的一般性场景是指集群规模不大,一般在10台机器以内。
不过,细想上面的实现逻辑,我们很容易会发现一个问题,步骤4,“即获取所有的子点,判断自己创建的节点是否已经是序号最小的节点”,这个过程,在整个分布式锁的竞争过程中,大量重复运行,并且绝大多数的运行结果都是判断出自己并非是序号最小的节点,从而继续等待下一次通知——这个显然看起来不怎么科学。客户端无端的接受到过多的和自己不相关的事件通知,这如果在集群规模大的时候,会对Server造成很大的性能影响,并且如果一旦同一时间有多个节点的客户端断开连接,这个时候,服务器就会像其余客户端发送大量的事件通知——这就是所谓的惊群效应。而这个问题的根源在于,没有找准客户端真正的关注点。
我们再来回顾一下上面的分布式锁竞争过程,它的核心逻辑在于:判断自己是否是所有节点中序号最小的。于是,很容易可以联想的到的是,每个节点的创建者只需要关注比自己序号小的那个节点。
3、利用临时顺序节点实现共享锁的改进实现
下面是改进后的分布式锁实现,和之前的实现方式唯一不同之处在于,这里设计成每个锁竞争者,只需要关注”locknode”节点下序号比自己小的那个节点是否存在即可。
算法思路:对于加锁操作,可以让所有客户端都去/lock目录下创建临时顺序节点,如果创建的客户端发现自身创建节点序列号是/lock/目录下最小的节点,则获得锁。否则,监视比自己创建节点的序列号小的节点(比自己创建的节点小的最大节点),进入等待。
对于解锁操作,只需要将自身创建的节点删除即可。
具体算法流程如下图所示:
使用上述算法进行测试的的结果如下表所示:
该算法只监控比自身创建节点序列号小(比自己小的最大的节点)的节点,在当前获得锁的节点释放锁的时候没有“惊群”。
总结 利用临时顺序节点来实现分布式锁机制其实就是一种按照创建顺序排队的实现。这种方案效率高,避免了“惊群”效应,多个客户端共同等待锁,当锁释放时只有一个客户端会被唤醒。
4、使用menagerie
其实就是对方案3的一个封装,不用自己写代码了。直接拿来用就可以了。
menagerie基于Zookeeper实现了javautilconcurrent包的一个分布式版本。这个封装是更大粒度上对各种分布式一致性使用场景的抽象。其中最基础和常用的是一个分布式锁的实现: orgmenagerielocksReentrantZkLock,通过ZooKeeper的全局有序的特性和EPHEMERAL_SEQUENTIAL类型znode的支持,实现了分布式锁。具体做法是:不同的client上每个试图获得锁的线程,都在相同的basepath下面创建一个EPHEMERAL_SEQUENTIAL的node。EPHEMERAL表示要创建的是临时znode,创建连接断开时会自动删除; SEQUENTIAL表示要自动在传入的path后面缀上一个自增的全局唯一后缀,作为最终的path。因此对不同的请求ZK会生成不同的后缀,并分别返回带了各自后缀的path给各个请求。因为ZK全局有序的特性,不管client请求怎样先后到达,在ZKServer端都会最终排好一个顺序,因此自增后缀最小的那个子节点,就对应第一个到达ZK的有效请求。然后client读取basepath下的所有子节点和ZK返回给自己的path进行比较,当发现自己创建的sequential node的后缀序号排在第一个时,就认为自己获得了锁;否则的话,就认为自己没有获得锁。这时肯定是有其他并发的并且是没有断开的client/线程先创建了node。
0条评论