问题描述
我现在已经知道了如何使用服务器推送技术,但是我还是有一个问题不懂,就是两个网页之间到底如何交换信息的?就是说一个网页发送了一条消息,另外一个网页的会话在服务器是如何访问到的啊?
解决方案
解决方案二:
占个沙发先。说白了,有A.aspx页面和B.aspx页面。A.aspx页面发出了一段文字,B.aspx页面如何能得到?不访问数据库,不使用Application保存聊天信息。那样服务器会爆掉的
解决方案三:
有没有高手来啊?小弟在线等啊。
解决方案四:
该回复于2012-07-28 10:27:09被版主删除
解决方案五:
解决方案六:
有没有高手来啊,,,都等了一天了
解决方案七:
声明一下,我是想做一个WEB聊天的。
解决方案八:
首先你把A发送的信息发给服务器,存起来,然后B轮询获得。轮询间隔时间稍微长一点,可以缓解服务器压力。(个人见解)
解决方案九:
引用7楼的回复:
首先你把A发送的信息发给服务器,存起来,然后B轮询获得。轮询间隔时间稍微长一点,可以缓解服务器压力。(个人见解)
---------------------可是服务器怎么存储了?这就是我最大的疑问。
解决方案十:
可是服务器怎么存储呢?我就是不知道这个。引用7楼的回复:
首先你把A发送的信息发给服务器,存起来,然后B轮询获得。轮询间隔时间稍微长一点,可以缓解服务器压力。(个人见解)
解决方案十一:
有没有高手来教教小弟我啊。。。
解决方案十二:
Android推送通知指南分类:移动互联网2011-06-2315:2616359人阅读评论(47)收藏举报在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。在Android手机平台上,Google提供了C2DM(CloudtoDeviceMessaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能。AndroidCloudtoDeviceMessaging(C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。但是经过一番研究发现,这个服务存在很大的问题:1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的AppServer必须也在国外,这个恐怕不是每个开发者都能够实现的;有了上述两个使用上的制约,导致我最终放弃了这个方案,不过我想利用另外一篇文章来详细的介绍C2DM的框架以及客户端和AppServer的相应设置方法,可以作为学习与参考之用。即然C2DM无法满足我们的要求,那么我们就需要自己来实现Android手机客户端与AppServer之间的通信协议,保证在AppServer想向指定的Android设备发送消息时,Android设备能够及时的收到。下面我来介绍几种常见的方案:1)轮询:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。2)SMS:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,你很难找到免费的短消息发送网关,关于这个方案的实现,可以参考如下链接:https://labs.ericsson.com/apis/mobile-java-push/。3)持久连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。前两个方案存在明显的不足,第三个方案也有不足,不过我们可以通过良好的设计来弥补,以便于让该方案可以有效的工作。毕竟,我们要知道GMail,GTalk以及GoogleVoice都可以实现实时更新的。
这个是安卓的。但原理是一样的。真正的推送都需要有服务主动送数据,而客户端监听数据。这是之前别人问的。http://topic.csdn.net/u/20100125/10/855fc04e-8f2d-4da0-a114-bf53c75f7d8b.html如果你要的是推送的这种html5可以实现。之下的协议是没有办法的。只能采用无刷新ajax这种。还有的就是通过插件。比如Silverlight,flash这些个东东来做。
解决方案十三:
象ajax这种就不属于推送了。
解决方案十四:
大哥,你QQ号多少?我能加你QQ请教一下你吗?引用12楼的回复:
象ajax这种就不属于推送了。
解决方案十五:
我现在如何使用推送技术,我已经知道了。问题是我不知道,服务器是如何保存一个用户发出的信息的。引用13楼的回复:
大哥,你QQ号多少?我能加你QQ请教一下你吗?引用12楼的回复:象ajax这种就不属于推送了。
解决方案:
有没有高手在啊???WEB聊天的时候,服务器是如何保存数据的啊?
解决方案:
引用15楼的回复:
有没有高手在啊???WEB聊天的时候,服务器是如何保存数据的啊?
服务器不持久保存什么数据,如果进程重启了,或者超过一定时间(例如3秒种),这个数据自然就没了。
解决方案:
大哥,那具体是怎么保存的呢?我就是搞不懂如何短暂的保存。引用16楼的回复:
引用15楼的回复:有没有高手在啊???WEB聊天的时候,服务器是如何保存数据的啊?服务器不持久保存什么数据,如果进程重启了,或者超过一定时间(例如3秒种),这个数据自然就没了。
解决方案:
http://blog.maartenballiauw.be/post/2011/11/29/Techniques-for-real-time-client-server-communication.aspx类似原理~http://geekswithblogs.net/jeroenb/archive/2011/12/14/signalr-starter-application.aspx类库什么的,都有了,建个realtime的聊天系统,加起来就10多句代码,采用的是signalr。你说的短暂保存,也就是收到消息后的前段显示拉。对于消息的存储,如果要存数据库,收、发消息时候处理即可。也就是SQL的INSERT这些咯。
解决方案:
引用17楼的回复:
大哥,那具体是怎么保存的呢?我就是搞不懂如何短暂的保存。
晕死!什么叫做保存?既然你实现了服务器推送功能,那么编程序可能就是这样的if(msgis路由消息){varx=(路由消息)msg;varclient=GetTcpClient(x.TargetUser);MySocket.SendMessage(msg,client);}else......
这保存什么?消息只是一个局部变量引用一下,转发给另外一个客户端,就扔掉了。
解决方案:
对于所谓的“http长连接”也是一样,只不过这里的tcpclient概念换成httpcontext而已。当客户端访问服务器的时候,服务器“挂起”了HttpContext到一个队列中,这时这个客户端也就被挂起了,等服务器此context的Response操作并且执行其.Close操作之后,服务器从队列中彻底删除此HttpContext。这也许算是有存储,但是仅限于内存中,跟数据库毫无关系。而消息,根本不落地,没有存储。如果说跟数据库扯上半点关系,顶多是用来做日志备份用的。设计IM程序的时候不要扯上数据库概念。一般的小办公室OA也许可以随便拿数据库sql语句编程就当作你的简单逻辑程序了,但是真正的即时通讯设计逻辑怎么可能“奢侈地”纠结很多无关的概念呢?消息就是从一个客户端到另外一个客户端,这个过程中跟数据库没有关系。
解决方案:
我倒啊。。。我现在具体搞不懂的问题就是:一个客户端发出的信息,另外一个客户端是怎么能访问到的?打个比方,A用户与服务器建立了长连接,B用户向服务器发出了信息,现在的问题是A用户如何通过服务器获得B用户发出的信息啊?引用18楼的回复:
http://blog.maartenballiauw.be/post/2011/11/29/Techniques-for-real-time-client-server-communication.aspx类似原理~http://geekswithblogs.net/jeroenb/archive/2011/12/14/signalr-starter-application.asp……
解决方案:
https://github.com/SignalR/SignalR/wiki/QuickStart-Persistent-Connections你照这个写,自然就明白咯。(内部的原来还是要好好看他的WIKI)就接收消息的实现来说,关注这段Javascript+HTML这段就是咋个实现的方法。...接收到消息就设置前台组件connection.received(function(data){$('#messages').append('<li>'+data+'</li>');});有些东西说一堆,还是不清楚,直接自己照例子写写,自己也就感悟了。
解决方案:
简单啊,比如你一个页面request.setattribute("msg","这是消息");然后另一个页面去get这个msg就可以了
解决方案:
哥啊,别闹了你真的了解了什么是推送了么?如果你了解了,就不该问B如何去获得消息,而是服务器判断A的消息是发给B的,则直接就发给B了而不是先保存在某个地方,等着B去取好比快递和邮局的概念如果是邮局,A给B写一封信,是寄存在邮局的,然后等B自己有空了去邮局看有没有给自己写的信而快递,直接送到你家,根本不保存
解决方案:
html5websocket