erlang官方英文pdf关于xmpp/jabber/bosh/websocket的相关翻译(1)

想做客户端间的通信压力测试,找了半天找不到相应的测试文件,只能自己翻官文了……


================================分割线======================================================


没有对jabberrecoder所以你必须自己写session


Jabber插件并没有从语法上解析XML


因为jabber插件并不解析XML,所以必须告诉程序何时一个request完成了。有三种方式,使用ack属性:


Ack=local’:一旦从服务中返回的packet被接收,就认为是完成了。如果你使用一个从来不从服务返回的ack,它将会永远等待下去。


Ack=no_ack ,一旦request发送了,就认为是完成了,不用等待返回数据


Ack=global’同步用户,其主要作用是在发送消息前等待所有的用户连接。为了达到这个目的,将一个request设置为global ack,比如:


<request> <jabber type=”presence”ack=”glocal”/> </request>


同时你也必须定义将要连接的用户:


<option type="ts_jabber"name="global_number" value="100"></option>


为了保证所有的global_number用户都开始了,给users增加maxnumber属性


<users maxnumber="100"interarrival="1.0" unit="second"></users>


 


 


双向的presence


如果你将sessionbidi属性的值设为true,从服务端来的消息就会被解析,当前,只有名单订阅请求会被处理,如果一个用户收到一个subscription request(名单订阅请求<presence ... type="subscribe">),。其将会返回一个名单订阅请求信息:<presence ... type="subscribed">


 


 


状态:offline connected online


你可以发送信息给一个在线或者离线用户,一个用户会被认为是在线的如果他已经发送了一个presence:initial信息(在这条信息之前,这个用户的状态该是connected


如果你想在变为offline之前改为connected,你可以使用一个presencefinal信息:


Presencefinal做两件事情:


从在线用户online列表中移出用户,然后将他们移动到连接用户connected列表中


发送一个广播状态更新类型为”unavailable


Presencefinal是可选的


 


 


验证


下面是一个可能的验证方法的配置例子,注意:这儿用的通常的表达式只是例子,他们可能会被修改,一句一个具体的服务是如何实现的,如何组装消息的。


普通验证:发送一个标准的文本密码:


<session probability="100"name="jabber-plain" type="ts_jabber">


<request><jabber type="connect" ack="local"></jabber></request>


<thinktimevalue="2"></thinktime>


<transactionname="auth_plain">


<request> <jabber type="auth_get"ack="local"></jabber> </request>


<request> <jabber type="auth_set_plain"ack="local"></jabber> </request> </transaction>...


 </session>


XMPP JEP-0078中描述的摘要式身份验证,non-sasl身份验证:


<session probability="100"name="jabber-digest" type="ts_jabber">


<!-- regexp captures stream ID returnedby server -->


<request>


 <dyn_variable name="sid"re="&lt;stream:streamid=&quot;(.*)&quot;xmlns:stream"/>


 <jabber type="connect"ack="local"></jabber>


</request>


<thinktimevalue="2"></thinktime>


<transactionname="auth_digest">


 <request> <jabbertype="auth_get" ack="local"></jabber></request>


<request subst="true"> <jabbertype="auth_set_digest" ack="local"></jabber></request> </transaction>


 ...


</session>


Sip-digest身份验证


<session probability="100"name="jabber-sipdigest" type="ts_jabber">


<request> <jabbertype="connect" ack="local"></jabber></request>


<thinktimevalue="2"></thinktime>


<transactionname="auth_sipdigest">


<!-- regexp captures nonce valuereturned by server -->


 <request>


 <dyn_variable name="nonce"re="&lt;Nonceencoding=&quot;hex&quot;&gt;(.*)&lt;\/Nonce&gt;"/>


 <jabber type="auth_get"ack="local"></jabber>


 </request>


 <request subst="true"><jabber type="auth_set_sip"ack="local"></jabber> </request> </transaction>


 ...


 </session>


 


文档结构:


默认编码是utf-8,可以使用不同的编码格式:


<?xml version="1.0"encoding="ISO-8859-1"?>


 


客户端和服务端


基本建立:


对于非均匀分布荷载,可以使用基本建立,比如:


<clients>


 <client host="localhost"use_controller_vm="true"/>


 </clients>


<servers>


 <server host="192.168.1.1"port="80" type="tcp"></server>


</servers>


这样就会开始在同一个host和同一个erlang虚拟机上压力测试


服务是集群的入口,你可以添加很多个服务,默认情况下每一个服务权重都是1,并且每一个session都会随机根据权重选择一个服务。你可以为每一个服务分配一个权重,如下所示:


<servers>


 <server host="server1"port="80" type="tcp"weight="4"></server>


 <server host="server2"port="80" type="tcp"weight="1"></server>


</servers>


 


 


高端建立:


如下所示:


<clients> <clienthost="louxor" weight="1" maxusers="800"><ip value="10.9.195.12"></ip> <ipvalue="10.9.195.13"></ip> </client> <clienthost="memphis" weight="3" maxusers="600"cpu="2"/> </clients>


<servers> <serverhost="10.9.195.1" port="8080"type="tcp"></server> </servers>


一些虚拟ip可以被用来模拟更多机器,这是很有用的,有利于负载均衡,可以使用<ip scan="yes" value="eth0"/>来自动探测可用ip


 


 


Maxusers


这个变量是用来绕开一个单线程所能打开的最大socket数,当用户比限制的更多是,就会多开一个虚拟机,来处理新的用户,


 


 


Monitoring监控


Tsung可以检测远程服务,私用一些后端的技术来和远端agent交流。


 


Erlang


远端agenttsung开启,其使用erlang来检索服务上活动的统计,比如,这儿是一个建立在erlang agents上的集群监控,是一个六台计算机的集群


<monitoring> <monitorhost="geronimo" type="erlang"></monitor><monitor host="bigfoot-1"type="erlang"></monitor> <monitorhost="bigfoot-2" type="erlang"></monitor><monitor host="f14-1" type="erlang"></monitor><monitor host="f14-2" type="erlang"></monitor><monitor host="db" type="erlang"></monitor></monitoring


 


定义压力测试过程:


随机注册用户:


<load>


 <arrivalphase phase="1"duration="10" unit="minute">


 <users interarrival="2"unit="second"></users>


 </arrivalphase>


<arrivalphase phase="2"duration="10" unit="minute">


 <users interarrival="1"unit="second"></users>


 </arrivalphase>


<arrivalphase phase="3"duration="10" unit="minute">


 <users interarrival="0.1"unit="second"></users>


</arrivalphase>


 </load>


第一阶段,在前十分钟,每两秒钟创建一个用户,第二阶段,在接下来的10分钟内,每秒钟会创建一个用户,第三阶段,在最后的十分钟内,每一秒钟会建立十个用户,当所有用户结束其session时,测试结束。


也可以用interarrival代替interarrival,比如:


<arrivalphase phase="1"duration="10" unit="minute">


 <users arrivalrate="10"unit="second"></users>


</arrivalphase>


可以通过maxnumber属性限制每一个阶段生成的用户数,如下所示:


<arrivalphase phase="1"duration="10" unit="minute">


 <users maxnumber="100"arrivalrate="10" unit="second"></users>


 </arrivalphase>


<arrivalphase phase="2"duration="10" unit="minute">


 <users maxnumber="200"arrivalrate="10" unit="second"></users>


</arrivalphase>


在这个例子中,只有100个用户会在第一阶段被创建,然后两百个在第二阶段。


完整的顺序可以使用loop属性在load标签中,loop=2表示要再循环两次结果就是执行三次。


 


 


设置选择项options


BOSH的路径


你可以使用如下设置来设置BOSH的路径:


<option name="bosh_path"value="/http-bind"/>


WebSocket设置


当你的server使用WebSocket时,你可以设置如下WebSocket设置:


<option name="websocket_path"value="/chat"/>


<!-- send websocket data with textframe, default binary-->


<option name="websocket_frame"value="text"/>


使用WebSocket_path来设置websocket request的路径,使用websocket_frame来设置类型(binary ,text,默认是binary


XMPP/JABBER 选项:


专有协议下的默认值是可以定义的,比如:


<option type="ts_jabber"name="global_number" value="5" />


<option type="ts_jabber"name="userid_max" value="100" />


<option type="ts_jabber"name="domain" value="jabber.org" />


<option type="ts_jabber"name="username" value="myuser" />


<option type="ts_jabber"name="passwd" value="mypasswd" />


<option type="ts_jabber" name="muc_service"value="conference.localhost"/>


 


 


Thinktimes


你可以设置固定的或者随机的thinktimes来分割请求,


<thinktime value="20"random="true"></thinktime>


<thinktime min="2"max="10" random="true"></thinktime>


<thinktimevalue="%%_rndthink%%" random="true"></thinktime>


============================================================乱七八糟的翻译的结束的分割线====================

哪位朋友知道如何用tsung测客户端间通信的压力测试,或者知道如何测websocket,求留言。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值