最近在做一些实时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