在一般的B/S程序中(最典型的是web服务),工作的方式是客户端(brower)向服务器端(server)发送一个请求,服务器端响应这个请求并发回客户端所请求的数据。在这个过程中服务器端扮演的是一个被动响应的角色,一般的情况下,服务器端是不会主动向客户端写数据的。由于HTTP是一个无连接的协议,也就是说当服务器端完成对客户端的响应后,双方的连接就断开了,直到下一次客户端发出请求时再重新建立连接。这样的HTTP协议是节省网络资源的,但是也给我们带来了一些麻烦,比如客户端不能实时探查服务器端的数据变化,不能作出及时的响应。所以当我们在做一些需要客户端和服务器端互相响应的程序时(比如聊天室、web短信息),不得不在客户端不停的刷新页面,以求获得最新的数据,这样做增加的服务器的负担。如果服务器能在数据发生变化的时候主动向客户端写数据,那么问题就解决了,这就是所谓的“推”技术。
在java中,客户端主动向服务器端申请数据,叫做“拉”;服务器主动向客户端写数据,叫做“推”。我们可以在服务器端打开某个端口,监听客户端的连接,就可以向客户端随意写数据,这是我们做C/S程序的原理,“推”技术采用相同的原理,只是客户端是浏览器而已,只要我们按照浏览器能够识别的格式向客户端写数据,客户端就可以通过HTTP与服务器建立连接,并获得数据。
HTTP是一个很庞大的协议,但是我们只需要用到很小一部分。最重要的是要知道按照什么格式写数据,浏览器才认识。当我们浏览一个网站的某一页,比如www.sohu.com/page.htm的时候,我们是在向服务器发送这样一个信息:
GET /page.htm HTTP/1.0 From: someuser@somehost.com User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0; DigExt)
其中第一行是我们要关注的,它由空格分隔成三部分,一是请求的方法(get),二是请求的页面,三是HTTP的版本。如果请求无误,服务器将返回如下信息:
HTTP/1.0 200 OK Date: Thu, 8 Oct 2002 14:23:11 GMT Content-Type: text/html Content-Length: 1644 <html> <body> <h1>Hello world!</h1> (其他内容)... </body> </html>
第一行表示连接成果,然后是返回数据的属性,从开始才是返回给浏览器返回的数据。在我们自己的程序中只需要按照上述格式写数据,就可以实现一个自己的简易web服务器。下面是一个hello,world的例子:
//myServer.java import java.io.*; import java.net.*; public class myServer { static ServerSocket server=null; static OutputStreamWriter ow=null; public static void main(String args[]) { int port=800; try { server=new ServerSocket(port); }catch(Exception e) { System.out.println(e); } while(true) { try { Socket socket=server.accept(); ow=new OutputStreamWriter(socket.getOutputStream()); ow.write("HTTP/1.0 200 ok "); ow.write("Content-Type:text/html "); ow.write(""); ow.write("hello,world"); ow.write(""); ow.flush(); socket.close(); }catch(Exception e) { System.out.println(e); } } } }
编译:javac myServer.java
运行:java myServer
然后打开浏览器,输入http://localhost:800,将会返回一个”hello,world”
以上就是一个“推”技术的简单实现,将它扩展一下,比如加入多线程响应,就可以实现无刷新的聊天室,请读者自己考
相关推荐
Flex与Java结合推送技术是一种常见的跨平台通信方案,主要用于构建富互联网应用程序(RIA)。本示例将探讨如何在Flex前端与Java后台之间实现数据的实时推送,以提高用户体验。Flex作为一个基于ActionScript的开放源...
在Java开发中,推送技术是实现应用程序与用户实时交互的关键技术。这个"java推送例子"很可能是关于如何在Java环境中实现实时数据推送的一个演示项目,名为“dwrpush_demo”。DWR(Direct Web Remoting)是一个开源的...
Java-Push开源实时消息推送系统是一种基于Java技术构建的、专为实现高效、稳定、实时的消息推送服务而设计的解决方案。在当今互联网应用中,实时消息推送已经成为提高用户体验和互动性的重要工具,尤其是在社交网络...
Java接入极光推送服务是移动应用开发者常用的一种技术,它允许开发者通过Java后端服务器向Android和iOS设备发送通知消息。极光推送(JPush)是中国知名的推送服务提供商,为开发者提供稳定、高效的推送解决方案。在...
Java集成极光推送是一项在Java应用中实现第三方消息推送服务的技术。极光推送(JPush)是极光公司提供的一款高效、稳定、易用的移动推送服务,它可以帮助开发者向Android和iOS设备发送自定义消息,提高用户活跃度和...
在Java环境中实现APNs推送,我们需要理解其工作原理,并掌握相应的API和技术。 首先,APNs推送的基本流程包括以下步骤: 1. **获取证书**:在Apple Developer后台创建一个Apple Push Services证书,下载.pem文件,...
Java消息推送技术是一种在分布式系统中实现异步通信的关键手段,尤其在移动应用开发中,它使得服务器能够向客户端实时发送信息,而无需客户端持续轮询。本文将深入探讨Java消息推送的相关知识点,并以名为"PushTalk-...
这种推送技术在Web应用中非常有用,可以用来更新用户界面而无需手动刷新页面。 首先,我们需要理解DWR的基本工作原理。DWR通过创建JavaScript对象来映射服务器端的Java方法,使得JavaScript可以直接调用这些方法,...
在IT行业中,消息推送服务是实现应用程序与用户实时交互的关键技术。友盟消息推送服务作为一个广泛使用的第三方平台,为开发者提供了便捷的API和SDK,帮助他们实现高效、稳定的消息推送功能。本文将深入探讨如何在...
这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2.iphone推送简单JAVA示例.doc 3.实现iphone推送服务端原理.doc 三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解...
Java信鸽推送是一种广泛应用于移动应用开发中的服务,主要用于实现跨平台的消息推送,包括iOS和Android设备。在本文中,我们将深入探讨如何在Java环境中利用信鸽推送服务进行接口开发,以便有效地向用户发送通知。 ...
Java信鸽推送代码主要涉及到的是使用信鸽(XGPush)提供的SDK进行消息推送的技术。XGPush是由网易云信提供的一款高效、稳定、便捷的移动推送服务,支持Android和iOS平台,可帮助开发者实现个性化消息推送,提升用户...
总的来说,JavaPush消息推送技术涉及到网络编程、多平台兼容性、安全性、性能优化等多个方面,开发者需要综合考虑这些因素来构建高效可靠的推送系统。通过学习和实践,你可以掌握如何创建一个能够满足各种需求的Java...
Java进行苹果APNS(Apple Push Notification Service)消息推送是一项在iOS和macOS应用程序中实现远程通知功能的关键技术。本文将详细介绍如何使用Java实现这一过程,同时关注`javapns`库和`bcprov-jdk`加密组件的...
利用服务器推送技术实现站内短消息(java) 让client与service建立一个长连接,不用client手动request,service会自动response,当有好友在线的时候,会自动把好友的信息加载到select里,点击好友发送短消息时,会在...
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...
因此,Java Web推送技术应运而生,使得服务器能够及时地将新数据推送给客户端,如聊天应用、股票报价、在线游戏等场景。 Java Web推送中,WebSocket是最常用的技术,它提供了一种全双工的通信协议,允许服务器和...
DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...
Pushlet Java 消息实时推送是一个典型的技术实现,它允许服务端主动向客户端发送数据,无需客户端持续轮询,极大地提高了效率和用户体验。在这个简单的消息推送实例中,特别强调了解决中文错误问题,这意味着它已经...
JavaMail 是一个在Java平台上处理电子邮件的开源API,它提供了丰富的功能,包括发送、接收邮件,以及处理附件、HTML格式的邮件、SMTP、POP3、...这个Demo提供了一个简单的起点,帮助你理解和实现Java中的邮箱消息推送。