b/s模式下的服务器推送技术是否真的不可能存在?
现在有一个需求:
当网站某一会员登录时,向他的所有好友发送一个消息(窗口右下角弹出,类似QQ那样)提示该会员已经上线。
google一下,很多人都在在bs下无法实现推送技术,不管是.net还是java,除非自己写个ActiveX插件。
目前我所能做到的就是用ajax定时去获取是否在线的状态。
像百合网就有这功能,当某一人上线后系统会提醒你某人已上线。
------解决方案--------------------不仅仅其它的AxtiveX,比较流行的Flash或者Flash也可以很好地支持tcp通信,甚至直接继承了音视频基本的采集编码播放等处理功能,这不比自己随便写一个ActiveX插件那么难以部署。
回到普通的网页,你需要基于http进行长连接的话,你的服务器端系统就要自己单独设计开发(并且你要计算好了你到底需要多少服务器才能支持长期运营),这毕竟不是普通的网页服务。
------解决方案--------------------方法1,ajax,每隔几秒去查一下数据库
方法2,上面说的长连接,百合用的是jsp,jsp中有DWR长连接框架,不过.net暂时还没有发现有什么长连接框架,高手指点一下呢?
还想弱弱的问一下,所谓的服务器“推”技术是建立在长连接框架上的吗?两者有什么关系木有?
------解决方案--------------------DWR 长连接方式的若干问题
http://hck.iteye.com/blog/845816
------解决方案--------------------关键点在于,http是短连接,比如这张网页,我向服务器请求了,返回了,OK,这次会话就结束了,如果你轮询,那也是短连接啊,只是不停地请求返回而已
------解决方案--------------------我理解的长连接应该像tcp协议那样,比如我在线看电影,OK,三次握手后建立连接,直到我电影看完关闭,难道长连接不是这样吗?
------解决方案--------------------但是楼主说的百合网,或许用户根本没有请求啊,也不会开个端口来listening,那服务端是如何知道该推给哪个机子的呢?
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------Application不是存储着在线列表嘛,,,你登录后,向在线列表中的好友ID发送一个信息
每个人页面有一个定时器 ,定时读取是否有发给自己的未读信息,,
这就是一个很简单的小范围应用
------解决方案--------------------都是用的Flash,
长链接就是个垃圾。
------解决方案--------------------用XMLHttpRequest 去实现(火狐可以)。
在服务器端写个死循环发送数据到客户端。
如代码:
C# code
while(true)
{
Response.Write("22222222");
Response.Flush();
Thread.Sleep(1000);
}
------解决方案--------------------
等HTML5吧
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
参考这个有源码
http://www.cnblogs.com/luhaiyan/archive/2011/04/22/2046615.html
------解决方案--------------------
如果是JAVA,那么servlet3.0开始支持彗星技术,也就是HTTP长连接技术。
当然,在ASP.NET中也应该是有对应的方案。
此外,如果不考虑IE6.7.8.9的话,html5 websocket是个不错的选择。
------解决方案--------------------