论坛首页 Java企业应用论坛

写了一个webmq

浏览 13323 次
精华帖 (6) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-09-15   最后修改:2011-05-12
最近在做一些实时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://www.webmq.net:8080/sample.html(默认使用websocket)
http://www.webmq.net:8080/sample.html?(使用httpstreaming)
http://www.webmq.net:8080/sample.html?uselp(使用longpolling)

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

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

2.
创建webmq的客户端,指定ip与端口,还有domain,domain是用来区分不同使用站点,原来把它做成一个通用独立服务
var webmq = new Webmq("www.webmq.net", "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
   发表时间:2010-09-16  
怎么把IP和端口都暴露出来了,期待续文....希望有更详细的文档出来
0 请登录后投票
   发表时间:2010-09-16  
期待下文,期待ing...
0 请登录后投票
   发表时间:2010-09-16  
翻了下,websocket使用一个 flash来做和服务器端tcp双向长链的桥。
不错。

除了appserver外,服务器端开一个单独的mq server

我一直在考虑做一个走http的mq server
0 请登录后投票
   发表时间:2010-09-16  
报bug:我在win7、ff 3.6.8下,后两种模式的queue模式无法获取消息,其余很正常,速度为100ms左右。
0 请登录后投票
   发表时间:2010-09-16  
tedeyang 写道
报bug:我在win7、ff 3.6.8下,后两种模式的queue模式无法获取消息,其余很正常,速度为100ms左右。

这个应该不是bug,queue模式是消息是一对一的,你发的消息可能被同时也监听这个queue的其他在线用户消费了,你换个其他名字的queue试试看
0 请登录后投票
   发表时间:2010-09-16  
kimmking 写道
翻了下,websocket使用一个 flash来做和服务器端tcp双向长链的桥。
不错。

除了appserver外,服务器端开一个单独的mq server

我一直在考虑做一个走http的mq server


目前我所引用一个开源的基于flash 的websocket实现还有一些性能问题,地址:http://github.com/gimite/web-socket-js/websocket,主要原因是flash的事件通知JS所用机制有一些问题,用了一种callLater机制,导致了JS得到通知延迟,另外要下载swf文件与相关JS也太大了,影响用户体验,性能最好 的浏览器原生 websocket支持(chrome,safari)>httpstreaming>longpolling>开源的flash的websocket实现。
0 请登录后投票
   发表时间:2010-09-16  
为什么不用openfire?
0 请登录后投票
   发表时间:2010-09-17  
afei1689 写道
tedeyang 写道
报bug:我在win7、ff 3.6.8下,后两种模式的queue模式无法获取消息,其余很正常,速度为100ms左右。

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

嗯,我也想到了这一点,所以后来又把其他页面都关闭了,测试结果仍然如此。可能socket仍然没有关闭。
我再测试一下,这次先打开后两个页面。
0 请登录后投票
   发表时间:2010-09-17  
报bug:received from topic[test],message:测试消息,time:-4075ms
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics