b/s模式下的服务器推送技术是否真的不可能存在?该怎么解决
b/s模式下的服务器推送技术是否真的不可能存在?现在有一个需求:当网站某一会员登录时,向他的所有好友发送
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# codewhile(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是个不错的选择。
------解决方案--------------------
AspNetComet 可以看看,研究学生下。。
[解决办法]
长连接跟ajax定时查询没有太多的区别。
定时查询只是瞬时的查询,查询完成之后就返回结果,不保证结果一定存在。
长连接相对而言连接的时间跟长一点,基本可能简单的理解为有查询结果就返回,如果没有查询结果,就不返回,继续在服务器端等待,直到有查询结果产生。
我理解的长连接模式:
在JSP采用死循环发生ajax请求,请求进入后台之后,查询结果,如果存在结果,返回ajax请求,否则将请求防止在后台等待结果,直到结果产生或者超时返回到客户端。
为了能够提高查询效率,可以认为的开辟一个缓存用于存放信息,ajax的请求查询基于缓存而不是数据库,从而减少定时与数据数据的交互。
比如我们可以将发送的信息存在在数据库的同时,将其放在缓存当中,并可以同时设定其状态为“未阅读”,ajax请求来之后将缓存中得状态为“未阅读”的数据获取返回到前台,同时在缓存中踢出此信息。
[解决办法]
长连接
轮询
都可以做 服务器推送没错
最近搞 webIm 获取信息都这样
你说的这个就像 webIm中的广播了