`
afei1689
  • 浏览: 16633 次
文章分类
社区版块
存档分类
最新评论

写了一个webmq

阅读更多
最近在做一些实时web相关的项目,实时web相对传统web来说,很多方面都是格格不入的,要在传统的web server上直接支持实时web会比较麻烦,当然最近很多web server也在做这方面的工作,但我始终觉得这类需求较为特别,做成一独立的服务较为合适,于是开发了一个基于web的message queue,也就是在浏览器端可能直接订阅和发送信息。

项目特点:
1.支持websocket(基于浏览器原生支持或flash socket)、httpstreaming(基于hidden ifame)、longpolling(基于jsonp script tag)。
2.较为全面 的浏览器支持,做过测试的浏览器:IE6、IE8、FF3.6、chrome5、chrome6、safari5,还有一些浏览器没做过测试,有时间再补上。
3.准实时信息交互,从发送到接收一般都在20ms以内,当然这个还看网络状况。
4.高并发的tcp连接支持,轻松上十万甚至百万并发连接,只要内存足够大。
5.支持两种消息模式:topic和queue。
6.支持嵌入式开发
7.消息非持久化
8.开源的
使用例子请看

http://42.121.57.116:8080/sample.html(默认使用websocket)
http://42.121.57.116:8080/sample.html?(使用httpstreaming)
http://42.121.57.116:8080/sample.html?uselp(使用longpolling)

如果你想在你的网站里使用webmq服务来实现一些实时web推送功能(比如:webIM、webGame、web协作、实时监控系统等),使用非常简单,以下就是一个使用的例子。

使用简介
1.
在你的html页面引用 以下的JS:
<script type="text/javascript" src="http://42.121.57.116/static?webmq.all.js"></script>

2.
创建webmq的客户端,指定ip与端口,还有domain,domain是用来区分不同使用站点,原来想把它做成一个通用独立服务
var webmq = new Webmq("42.121.57.116", "80", "test.com");

3.
指定要监听的queue或topic和相关的回调函数
webmq.subscribe("destName", function(message) {alert(message.message);}, "queue");

4.
发送消息到指定的queue或topic
webmq.publish("destName", "test-message", "queue");

5.
注销监听的queue或topic
webmq.unSubscribe("destName", "queue");

6.
不用的时候关闭
webmq.close();


下一步的计划
1.webmq server支持scale out和failover,解决高并发下的可扩展性的问题
2.提供一种可靠的消息确收机制,提高消息传输可靠性
3.解决基于flash的websocket的事件通知延迟的问题和提供一个无flash依赖的可选版本
4.提供安全认证机制
5.提供可插拨的消息存储机制,默认提供基于kahadb(activeMQ5.x默认使用的)
6.详细的网络通信接口文档说明

最近项目动态请关注作者微博:http://weibo.com/1462962703
分享到:
评论
28 楼 wst302 2011-05-12  
好东西,有开源吗,我想用看看
27 楼 凯旋人生 2010-12-01  
楼主这个东东很好呀,期望server端早日开源,拜读一下。
26 楼 kellersoon 2010-11-30  
不错,关注下! 问下,你是xiaosong吗?
25 楼 janrn 2010-11-17  
能下载试用吗, 这个东西提供只有JS还是包括服务端,如果我们要使用,使用方法步骤是怎样的
24 楼 ravi_zhou 2010-10-21  
真恐怖!哎~不说不说
23 楼 javatim 2010-10-21  
看不懂,不会用,我用下最土的办法写一个,哈!
22 楼 linkerlin 2010-10-20  
能不能和CometD框架比较下?
21 楼 afei1689 2010-10-18  
mercyblitz 写道


请教一下,我感兴趣的是streaming,实现的方式是不是采用NIO的事件HTTP响应?

我看了一下Chrome和Opera浏览器在不停地等待下一个输出(响应)。


longpolling、streaming、websocket都是用nio的,用的是jboss的netty的nio框架。
20 楼 mercyblitz 2010-10-18  
afei1689 写道
最近在做一些实时web相关的项目,实时web相对传统web来说,很多方面都是格格不入的,要在传统的web server上直接支持实时web会比较麻烦,当然最近很多web server也在做这方面的工作,但我始终觉得这类需求较为特别,做成一独立的服务较为合适,于是开发了一个基于web的message queue,也就是在浏览器端可能直接订阅和发送信息。

项目特点:
1.支持websocket(基于浏览器原生支持或flash socket)、httpstreaming(基于hidden ifame)、longpolling(基于jsonp script tag)。
2.较为全面 的浏览器支持,做过测试的浏览器:IE6、IE8、FF3.6、chrome5、chrome6、safari5,还有一些浏览器没做过测试,有时间再补上。
3.准实时信息交互,从发送到接收一般都在20ms以内,当然这个还看网络状况。
4.高并发的tcp连接支持,轻松上十万甚至百万并发连接,只要内存足够大。
5.支持两种消息模式:topic和queue。
6.支持嵌入式开发
7.消息非持久化
8.准备开源

使用例子请看

http://122.224.72.222:8080/webmq/sample.html(默认使用websocket)
http://122.224.72.222:8080/webmq/sample.html?(使用httpstreaming)
http://122.224.72.222:8080/webmq/sample.html?uselp(使用longpolling)

使用简介
1.
在你的html页面引用 以下的JS:
<script type="text/javascript" src="http://122.224.72.222:7777/static?webmq.all.js"></script>

2.
创建webmq的客户端,指定ip与端口,还有domain,domain是用来区分不同使用站点,原来把它做成一个通用独立服务
var webmq = new Webmq("122.224.72.222", "7777", "webmq.com");

3.
指定要监听的queue或topic和相关的回调函数
webmq.subscribe("destName", function(message) {alert(message.message);}, "queue");

4.
发送消息到指定的queue或topic
webmq.publish("destName", "test-message", "queue");

5.
注销监听的queue或topic
webmq.unSubscribe("destName", "queue");

6.
不用的时候关闭
webmq.close();


下一步的计划
1.webmq server支持scale out和failover,解决高并发下的可扩展性的问题
2.提供一种可靠的消息确收机制,提高消息传输可靠性
3.解决基于flash的websocket的事件通知延迟的问题和提供一个无flash依赖的可选版本
4.提供安全认证机制
5.提供可插拨的消息存储机制,默认提供基于kahadb(activeMQ5.x默认使用的)
6.详细的网络通信接口文档说明


请教一下,我感兴趣的是streaming,实现的方式是不是采用NIO的事件HTTP响应?

我看了一下Chrome和Opera浏览器在不停地等待下一个输出(响应)。

19 楼 argan 2010-10-14  
不错的,期待下文详解
18 楼 shaomeng95 2010-10-14  
现在大家研究的都很先进啊 不错
17 楼 melin 2010-09-25  
activemq ajax
16 楼 agapple 2010-09-25  
这个得顶顶,关注下
15 楼 jiang0620 2010-09-17  
大虾afei的作品改天一定拜读,并期待你的下一步计划
14 楼 罗卜头 2010-09-17  
不错啊~~
13 楼 afei1689 2010-09-17  
Hooopo 写道
报bug:received from topic[test],message:测试消息,time:-4075ms

时间的计算是在js里做的,这种情况可能是两台电脑的时间不同步造成。
12 楼 tedeyang 2010-09-17  
测试下了,第三种可以。
第二种首次打开时,queue无效,队列名称改为test1,一下子就收到多条消息。
看来你的sample应该在页面上随机生成一个queue name,呵呵。
11 楼 Hooopo 2010-09-17  
报bug:received from topic[test],message:测试消息,time:-4075ms
10 楼 tedeyang 2010-09-17  
afei1689 写道
tedeyang 写道
报bug:我在win7、ff 3.6.8下,后两种模式的queue模式无法获取消息,其余很正常,速度为100ms左右。

这个应该不是bug,queue模式是消息是一对一的,你发的消息可能被同时也监听这个queue的其他在线用户消费了,你换个其他名字的queue试试看

嗯,我也想到了这一点,所以后来又把其他页面都关闭了,测试结果仍然如此。可能socket仍然没有关闭。
我再测试一下,这次先打开后两个页面。
9 楼 rockysz 2010-09-17  
支持梦大师!

相关推荐

    WebMQonttrol:Web界面,使用Node.js和Socket.io查看用于家庭自动化的MQTT消息集

    Web质量控制 Web界面和服务器,用于使用Node.js和Socket.io发布/订阅MQTT消息,以实现家庭自动化。... 服务器创建与MQTT代理的连接,并从/向连接的客户端页面传递消息。 ###结构概述 结构和布局非常适合我的用例,对于...

    polylearn-0.1.dev0-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于Simulink的语音信号降噪与增强.docx

    基于Simulink的语音信号降噪与增强.docx

    java资源Java条形码生成库 Barcode4J

    java资源Java条形码生成库 Barcode4J提取方式是百度网盘分享地址

    pgmagick-0.7.5-cp27-cp27m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    pendulum-2.1.2-cp310-cp310-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    com.bishua666.luxxx1.apk

    com.bishua666.luxxx1.apk

    Nginx配置文件中FastCGI相关参数理解

    Nginx配置文件中FastCGI相关参数理解

    preshed-3.0.6-cp311-cp311-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    Golang: 高效、简洁的Google开源编程语言

    内容概要:本文介绍了由 Google 开发的编程语言 Golang (Go)。Golang 是一种静态类型、编译型且具有垃圾回收功能的并发编程语言,旨在提供简单、可靠和高效的开发体验。它的语法类似于 C 语言,去除了复杂的语法结构,提高了代码可读性和效率。同时,Golang 还提供了卓越的性能、内存管理和跨平台支持,适用于网络应用、分布式系统、云计算等领域。此外,文中提到多个知名公司在其业务中广泛采用了 Go 语言,并定期更新版本以适应不断变化的技术需求。 适合人群:对于对编程感兴趣的技术人员,尤其是希望深入了解并发编程以及寻求高性能后端语言的研发人员。 使用场景及目标:①理解和掌握 Golang 的基本概念及其与其他传统编程语言的区别;②探索 Golang 如何利用 goroutines 和 channels 提供强大的并发编程能力;③了解 Golang 在构建高可用性分布式系统方面的优势。 其他说明:随着 Go 社区的发展壮大和技术的不断创新,学习 Golang 不仅为开发者打开了新的视野,也为未来的项目选型提供了有力支持。

    yolo算法-烟盒数据集-1934张图像带标签.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    polylearn-0.1.dev0-cp310-cp310-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    【java毕业设计】医院门诊挂号系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统主要包括主页、个人中心、用户管理、就诊人建档管理、医院介绍管理、科室管理、医生管理、预约挂号管理、用户退号管理、异常提醒管理、留言板、系统管理等功能模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    Pillow_SIMD-9.0.0.post0-cp37-cp37m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    汉语言文学 4.pdf

    汉语言文学 4.pdf

    pendulum-2.0.5-cp27-cp27m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    yolo算法-戴眼镜数据集-636张图像带标签-.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    中国城镇住户微观数据(1986-2015)-最新全集.zip

    中国城镇住户微观数据(1986-2015)-最新全集.zip

    Pillow-3.4.2-cp36-cp36m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    中国数字经济发展与基础设施指标(2011-2020)-最新数据.zip

    中国数字经济发展与基础设施指标(2011-2020)-最新数据.zip

Global site tag (gtag.js) - Google Analytics