165365比分网

openfire服务器2种性能测试方法

📅 2025-08-07 07:11:48 👤 admin 👁️ 5197 ❤️ 713
openfire服务器2种性能测试方法

农历(闰六月十四)

关于

友情链接

Toggle navigation

Harries Blog™

追心中的海,逐世界的梦

首页

编程技术

Java

软件架构

移动开发

后端

前端

大数据

数据库

算法

人工智能

测试

100 Days of AI Programming

代码管理

IT教程

springboot-demo

Java入门教程

bootstrap3

CSS

Apache基础教程

php

ionic 教程

Python

mysql教程

eclipse

Ubuntu VPS系统配置

AngularJS 教程

MongoDB教程

Struts2教程

springcloud-demo

Redis教程

Spring教程

Git教程

openfire参考指南

Jenkins进阶系列

Java设计模式

HBase教程

java-demo

Maven教程

hibernate教程

Docker 教程

memcached教程

Quartz指南

Ant教程

java实例教程

Hive教程

SpringCloud

ANTLR教程

XStream教程

Elastic-Job-Lite

Hazelcast教程

深入浅出MyBatis

ibaties教程

SVN教程

rabittmq教程

Hadoop教程

solr教程

WebService CXF学习

JPA教程

ActiveMQ中文指南

Java内存模型

dubbo教程

python3-demo

Linux入门视频教程

生活感悟

默认分类

博主自留地

一周一本书

一月一个人

互联网

互联网.出海

互联网.IPO

运维

Linux

docker

nginx

windows

操作系统

监控软件

vmware

虚拟化

tomcat

自动化

留言板

转载

发表于 2013年04月07日

浏览 (2,060)

评论 (1)

openfire服务器2种性能测试方法

XMPP Server(IM Server)不像Web Server有十分标准的性能评测工具, 一个新的IM服务器拿到之后,通常并没有十分方便的方式来进行测试性能。

通常我们只能依赖网上的数据来衡量某个服务器产品的性能。但是网上的数据通常并不准确,因为测试的环境, 测试的指标不同,测试的方法有差异,得到的结果并没有直接的可比性。我们去验证某些测试结果,得出的数据有2~3倍的差异并不奇怪。

因此最好通过自己的环境去验证这些产品的性能指标,所以构建一套简单的性能测试工具十分重要。目前想到的测试一个XMPP Server的几种方案。

使用 Smack API, 它是一个 Java 的XMPP Client Library,也是由Jive Software开发。

优点:编程简单。

缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户。

例子:http://www.igniterealtime.org/community/message/148722

使用 Java Socket异步NIO select方式, 模拟XMPP登录。XML可直接用string构建,可直接根据XML返回结果的特征字符判断调用是否成功。如使用XML library来解析可能会造成部分自身瓶颈。

优点:可以模拟更多的客户连接。1台客户机可以模拟数万个用户同时操作。

编程稍复杂,需要熟悉Java NIO async socket,或相关框架,如Mina

代码示例,使用MINA模拟客户端连接到服务器

/**

* Use mina client to connect xmpp server

* @author Tim

*

*/

public class XmppClient {

public static void main(String[] args) {

String hostname = "server";

int port = 5222;

SocketConnectorConfig cfg = new SocketConnectorConfig();

cfg.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));

for (int i = 1; i <= 2; i++) {

SocketConnector connector = new SocketConnector();

connector.connect(new InetSocketAddress(hostname, port),

new XmppProtocolHandler("tim" + i, "tim", "mina"), cfg);

}

}

}

class XmppProtocolHandler extends IoHandlerAdapter {

String username = "tim";

String password = "tim";

String server = "server";

String bareJid = username + "@" + server;

String resource = "mina";

public XmppProtocolHandler(String username, String password, String resource) {

this.username = username;

this.password = password;

this.resource = resource;

this.bareJid = username + "@" + server;

}

@Override

public void sessionClosed(IoSession session) throws Exception {

System.err.println("Closed. Total " + session.getReadBytes() + " byte(s)");

}

@Override

public void messageReceived(IoSession session, Object message)

throws Exception {

ByteBuffer buf = (ByteBuffer) message;

while (buf.hasRemaining()) {

System.out.print((char) buf.get());

}

System.out.flush();

}

@Override

public void sessionOpened(IoSession session) throws Exception {

sendPacket(session, sendStream(true));

Thread.sleep(50);

sendPacket(session, sendAuth(username, bareJid, password));

Thread.sleep(200);

sendPacket(session, sendStream(false));

Thread.sleep(50);

sendPacket(session, sendResource(username, resource));

Thread.sleep(50);

sendPacket(session, sendPresence(username));

}

private String genPassword(String bareJid, String username, String password) {

String str = bareJid + "\0" + username + "\0" + password;

BASE64Encoder base64 = new BASE64Encoder();

return base64.encode(str.getBytes());

}

private StringBuilder sendStream(boolean addHeader) throws IOException {

StringBuilder sb = new StringBuilder();

if (addHeader)

sb.append("");

sb.append("

.append("\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">");

return sb;

}

private StringBuilder sendAuth(String username, String bareJid,

String password) throws IOException {

String pwd = genPassword(bareJid, username, password);

StringBuilder sb = new StringBuilder();

sb.append("")

.append(pwd).append("");

return sb;

}

private StringBuilder sendResource(String username,

String resource) throws IOException {

StringBuilder sb = new StringBuilder();

sb.append("

.append("-0\" type=\"set\">")

.append(resource).append("");

return sb;

}

private StringBuilder sendPresence(String username)

throws IOException {

StringBuilder sb = new StringBuilder("

.append(username).append("-2\" />");

return sb;

}

private void sendPacket(IoSession session, StringBuilder sb) throws Exception {

sb.append("\r\n");

System.out.println(sb.toString());

session.write(sb.toString());

}

}

使用 tsung, tsung使用erlang开发,利用了erlang并发编程的优势,可以从一到多个客户机向发起xmpp请求。

优点:利用现成的工具,无需开发。测试过程使用XML来配置,不需要改动源代码。

缺点:配置和扩展复杂,学习成本,适应成本及扩展成本大。

使用 Python 等动态语言开发,如PyXMPP

优点:开发及重构效率比Java稍快,可以更多关注测试模型及指标本身。而不是测试程序怎么实现。

缺点:需要开发人员熟悉相关语言及特性。另外同样有 one thread per client 的问题,占用客户端资源过高。可能要几台客户机才能搞定一台服务器。

代码示例,下面例子可以对实现一个Python的client有个基本了解,详细可参考 PyXMPP examples 下面的例子。

class MyClient(Client):

def session_started(self):

self.stream.send(Presence())

def idle(self):

print "idle"

Client.idle(self)

if self.session_established:

target=JID("tim2",s.jid.domain)

self.stream.send(Message(to_jid=target,body=unicode("测试","utf-8")))

def post_disconnect(self):

print "Disconnected"

raise Disconnected

logger=logging.getLogger()

logger.addHandler(logging.StreamHandler())

logger.setLevel(logging.DEBUG)

libxml2.debugMemory(1)

print "creating stream..."

s=MyClient(jid=JID("tim@server/Test"),password=u"tim",auth_methods=["sasl:DIGEST-MD5","digest"])

print "connecting..."

s.connect()

print "processing..."

try:

try:

s.loop(1)

finally:

s.disconnect()

except KeyboardInterrupt:

traceback.print_exc(file=sys.stderr)

except (StreamError,Disconnected),e:

raise

libxml2.cleanupParser()

if libxml2.debugMemory(1) == 0:

print "OK"

else:

print "Memory leak %d bytes" % (libxml2.debugMemory(1))

libxml2.dumpMemory()

正文到此结束

赞 8

分享

所属分类:

openfire参考指南

本文标签:

openfire

测试

版权声明:

本文为互联网转载文章,出处已在文章中说明(部分除外)。如果侵权,请联系本站长删除,谢谢。

本文海报:

生成海报一

生成海报二

上一篇

xmpp.org中文版

下一篇

Openfire Scalability

热门推荐

openfire数据库安装指南

浏览(15,692)

评论(0)

Caffe 深度学习框架上手教程

浏览(11,796)

评论(0)

ReactiveCocoa入门教程:第一部分

浏览(12,599)

评论(0)

开源HIDS-OSSEC使用实例:监测CC攻击

浏览(12,497)

评论(0)

Decorators in ES7

浏览(17,153)

评论(4)

用Electron(Atom编辑器的兄弟项目)开发桌面应用

浏览(30,103)

评论(0)

Windows下JetBrains CLion中文输出乱码的解决方法

浏览(13,550)

评论(1)

2015年北京下第一场雪留念

浏览(8,273)

评论(17)

同步-@synchronized, NSLock, pthread, OSSpinLock性能比较

浏览(12,435)

评论(0)

【开班了】JAVA培训班正式招生

浏览(8,633)

评论(12)

相关文章

openfire数据库安装指南

openfire SSL支持

openfire自定义数据库集成指南

openfire的JavaDocs

openfire协议支持指南

openfire数据库模式

即时通信服务平台部署方案

openfire插件开发

openfire开发时打印日志到控制台

openfire源代码打包部署

openfire参考指南

1

openfire参考指南

2

openfire安装指南

3

openfire升级指南

4

openfire数据库安装指南

5

openfire SSL支持

6

openfire与LDAP集成指南

7

openfire自定义数据库集成指南

8

openfire可插拔的名册支持指南

9

openfire的JavaDocs

10

openfire编译源代码

11

openfire协议支持指南

12

openfire汉化翻译指南

13

openfire数据库模式

14

openfire定制指南

15

openfire服务器2种性能测试方法

16

Openfire Scalability

17

即时通信服务平台部署方案

18

openfire插件开发

19

openfire启动过程

20

openfire开发时打印日志到控制台

21

openfire源代码打包部署

22

openfire2种认证方式

说给你听

本文目录

随机标签

rrdtools

SqlServer

对象流

JAVA实例

西方人

内容开放协议

Spring Cloud Config

struct

reCAPTCHA

Office 365

container

上帝

SSPanel-Uim

cron

TimerTask

Canal

groovy

反向代理

排名

Micrometer Tracing

集群方案

Agent

企业级服务提供商

equals

business

驼峰函数

beanInfoCache

jacoco

redisTemplate

Thumbnailator

对账

Optional

jacoco

s3

TeamCity

支付系统

longtext

一致性

ISODate

埃隆·里夫·马斯克

数据泄露

db2

groovy

启动资金

XEN

创业

领导

成就全新

页回收机制

Qualifier

配件

书籍教程

springboot-demo

Java入门教程

bootstrap3

CSS

Apache基础教程

php

ionic 教程

Python

mysql教程

eclipse

Ubuntu VPS系统配置

AngularJS 教程

MongoDB教程

Struts2教程

springcloud-demo

Redis教程

Spring教程

Git教程

openfire参考指南

Jenkins进阶系列

Java设计模式

HBase教程

java-demo

Maven教程

hibernate教程

Docker 教程

memcached教程

Quartz指南

Ant教程

java实例教程

Hive教程

SpringCloud

ANTLR教程

XStream教程

Elastic-Job-Lite

Hazelcast教程

深入浅出MyBatis

ibaties教程

SVN教程

rabittmq教程

Hadoop教程

solr教程

WebService CXF学习

JPA教程

ActiveMQ中文指南

Java内存模型

dubbo教程

python3-demo

Linux入门视频教程

近期评论

Harrries 已经加上

阳光星河 阳光星河 https://www.276227.com

Harrries 域名是什么?我重新加上

阳光星河 大佬,我的域名到期,没注意,也没时间更新,就放着,谁知道挂壁了,现在换域名,今天才搬家成功,之前叫言之在线,现在改阳光星河,既然域名都换了,索性也改名算了,很长时间了,我的链接肯定也不在了,不过还是得过来说一声

阳光星河 大佬,我的域名到期,没注意,也没时间更新,就放着,谁知道挂壁了,现在换域名,今天才搬家成功,之前叫言之在线,现在改阳光星河,既然域名都换了,索性也改名算了,很长时间了,我的链接肯定也不在了,不过还是得过来说一声

Wang Fang I really enjoyed reading your post it was both informative and personal, which I think is the perfect combo. You explained things in a simple way that actually helped me understand better. It didn't feel overwhelming at all. Thanks for taking the time to share your experience. It's posts like these that make a real difference for people who are looking for genuine advice. Keep up the great work! I came across Libya's e-visa option while planning a spontaneous trip. Understanding the Libya tourist visa requirements helped me feel confident before booking. Everything was surprisingly straightforward. Once I arrived, I was amazed by the Roman ruins, local hospitality, and peaceful coastal towns. It felt like stepping into a place that time forgot, in the best way.

han25vox Interesting post!

Harrries 暂时不支持rss

Sul 请问站点支持RSS吗,url是什么?解析不到,看了下首页源码里好像也没有。

admin 已加上

随机文章

站长推荐

近期文章

1

Thor:Mac 上快速打开或切换应用工具

2

水手放映室:面向 Android 设备的互联网免费视频播放客户端

3

聊一聊淘宝首页和它背后的一套

4

Low-Poly图像生成器

5

【译】考虑

 标签的样式

6

CTO训练营曲毅:创业公司的事与人

7

Java的String对象不可修改?

8

使用安卓支持库,Material design 无处不在

9

架构的坑系列:重构过程中的过度设计

10

不要在存储过程中控制事务

1

VPS 自我监控

2

springboot接入多个ES启动时候自检报错

3

配置虚拟站点

4

openfire协议支持指南

5

修改上传文件权限

6

OpenVZ VPS 额外支持

7

2015年北京下第一场雪留念

8

openfire定制指南

9

mysql存储过程实例一:游标的使用

10

Linux删除或者新增SWAP分区

1

️ Netcup 最便宜服务器购买指南(2025 最新版)

2

深入探索Java虚拟机的神秘接口:JVMTI

3

只需要75美元就可以拥有一个终身免费的邮箱服务(250G+15个域名)

4

Day1:Project Kick-off Meeting Content(100 Days of AI Programming)

5

Using AI to build a recruitment website plan(100 Days of AI Programming)

6

Augment Agent:自动生成代码的未来

7

使用 acme.sh 自动更新 SSL 证书的指南

8

使用Cloudflare加速网站的具体操作步骤

9

如何开通google Free Tier长期免费云服务器(1C/1G)

10

如何获取oracle cloud永久免费的vps(4C/24G)?

网站信息

文章总数:82,771 篇

文件总数:284,424 个

标签总数:2,447 个

分类总数:86 个

留言数量:2,575 条

在线人数:692 人

运行天数:4,667天

最后更新:2025年08月07日13点

×

输入密码查看文章详情

确定

×

搜索文章

搜索

热门搜索:

Java

Springboot

Linux

Maven

Bootstrap

阿里云

×

评论信息框

可以通过QQ号实时获取昵称和头像

QQ

昵称

邮箱

网址

提交评论

×

山无棱江水为竭,冬雷震震夏雨雪,才敢请君舍

支付宝

微信

转账时请备注“博客赞助”

Loading...

其他链接

阿里云券

域名出售

网站地图

关于本站

友情链接

免责声明

关于本站

本站定位:个人技术类博客

本站作用:写博客、记日志、闲聊扯淡鼓捣技术。

问题交流

托管于阿里云 · 京ICP备14030975号-1

Copyright©2025 · Harries Blog™

上一则传输
服务器上网记录能保留多久
下一则传输
搜素“療伀橙釔鸤孿嵪殫潁躞嫎栔鶗芑”的成语

相关星图