在一般的B/S程序中(最典型的是web服务),工作的方式是客户端(brower)向服务器端(server)发送一个请求,服务器端响应这个请求并发回客户端所请求的数据。在这个过程中服务器端扮演的是一个被动响应的角色,一般的情况下,服务器端是不会主动向客户端写数据的。由于HTTP是一个无连接的协议,也就是说当服务器端完成对客户端的响应后,双方的连接就断开了,直到下一次客户端发出请求时再重新建立连接。这样的HTTP协议是节省网络资源的,但是也给我们带来了一些麻烦,比如客户端不能实时探查服务器端的数据变化,不能作出及时的响应。所以当我们在做一些需要客户端和服务器端互相响应的程序时(比如聊天室、web短信息),不得不在客户端不停的刷新页面,以求获得最新的数据,这样做增加的服务器的负担。如果服务器能在数据发生变化的时候主动向客户端写数据,那么问题就解决了,这就是所谓的“推”技术。
在java中,客户端主动向服务器端申请数据,叫做“拉”;服务器主动向客户端写数据,叫做“推”。我们可以在服务器端打开某个端口,监听客户端的连接,就可以向客户端随意写数据,这是我们做C/S程序的原理,“推”技术采用相同的原理,只是客户端是浏览器而已,只要我们按照浏览器能够识别的格式向客户端写数据,客户端就可以通过HTTP与服务器建立连接,并获得数据。
HTTP是一个很庞大的协议,但是我们只需要用到很小一部分。最重要的是要知道按照什么格式写数据,浏览器才认识。当我们浏览一个网站的某一页,比如www.sohu.com/page.htm的时候,我们是在向服务器发送这样一个信息:
GET/page.htmHTTP/1.0
From:someuser@somehost.com
User-Agent:Mozilla/4.0(compatible;MSIE5.0;WindowsNT5.0;DigExt)
空行
其中第一行是我们要关注的,它由空格分隔成三部分,一是请求的方法(get),二是请求的页面,三是HTTP的版本。如果请求无误,服务器将返回如下信息:
HTTP/1.0200OK
Date:Thu,8Oct200214:23:11GMT
Content-Type:text/html
Content-Length:1644
<html>
<body>
<h1>Helloworld!</h1>
(其他内容)...
</body>
</html>
第一行表示连接成果,然后是返回数据的属性,从<html>开始才是返回给浏览器返回的数据。在我们自己的程序中只需要按照上述格式写数据,就可以实现一个自己的简易web服务器。下面是一个hello,world的例子:
//myServer.java
importjava.io.*;
importjava.net.*;
publicclassmyServer
{
staticServerSocketserver=null;
staticOutputStreamWriterow=null;
publicstaticvoidmain(Stringargs[])
{
intport=800;
try
{
server=newServerSocket(port);
}catch(Exceptione)
{
System.out.println(e);
}
while(true)
{
try
{
Socketsocket=server.accept();
ow=newOutputStreamWriter(socket.getOutputStream());
ow.write("HTTP/1.0200ok ");
ow.write("Content-Type:text/html ");
ow.write("<html><body>");
ow.write("hello,world");
ow.write("</body></html>");
ow.flush();
socket.close();
}catch(Exceptione)
{
System.out.println(e);
}
}
}
}
编译:javacmyServer.java
运行:javamyServer
然后打开浏览器,输入http://localhost:800,将会返回一个”hello,world”
以上就是一个“推”技术的简单实现,将它扩展一下,比如加入多线程响应,就可以实现无刷新的聊天室,请读者自己考虑。
原文发表于《程序春秋》0301期
分享到:
相关推荐
Java-Push开源实时消息推送系统是一种基于Java技术构建的、专为实现高效、稳定、实时的消息推送服务而设计的解决方案。在当今互联网应用中,实时消息推送已经成为提高用户体验和互动性的重要工具,尤其是在社交网络...
Java接入极光推送服务是移动应用开发者常用的一种技术,它允许开发者通过Java后端服务器向Android和iOS设备发送通知消息。极光推送(JPush)是中国知名的推送服务提供商,为开发者提供稳定、高效的推送解决方案。在...
Java集成极光推送是一项在Java应用中实现第三方消息推送服务的技术。极光推送(JPush)是极光公司提供的一款高效、稳定、易用的移动推送服务,它可以帮助开发者向Android和iOS设备发送自定义消息,提高用户活跃度和...
Java实时推流技术是将摄像头捕捉到的视频流实时传输到服务器的过程,广泛应用于直播、监控等场景。在这个场景中,我们使用了JAVACV库,这是一个强大的Java接口,它封装了OpenCV、FFmpeg等多个开源库,使得在Java环境...
总结,基于Swing+Java的推箱子游戏设计与实现,是一个集编程技术、游戏逻辑和用户交互于一体的项目,它充分展示了Java语言的强大功能和Swing库的易用性。无论是对个人技能的提升还是教学实践,都有其深远的意义。
推箱子游戏,源自经典的逻辑益智...通过分析和学习这样的源码,不仅可以掌握Java编程技术,还能深入理解游戏开发的基本流程,提升逻辑思维和问题解决能力。无论是对初学者还是有经验的开发者,都是一个宝贵的学习资源。
可以设想,服务器端收集来自各种传感器的温度数据,然后通过服务器推技术将这些实时数据推送给客户端的Java Applet。Applet接收到数据后,可以更新显示界面,展示当前的温度状况。 在DOS环境下启动服务端,意味着...
【Java版推箱子】是一款基于Java编程语言,利用JavaSwing图形用户界面库以及XML技术开发的桌面小游戏。这款游戏的设计灵感来源于经典的智力游戏——推箱子,玩家需要在二维网格地图中移动一个代表自己的角色,将箱子...
这个"java推送例子"很可能是关于如何在Java环境中实现实时数据推送的一个演示项目,名为“dwrpush_demo”。DWR(Direct Web Remoting)是一个开源的Java库,它允许在浏览器和服务器之间进行全双工通信,非常适合用于...
Java消息推送技术是一种在分布式系统中实现异步通信的关键手段,尤其在移动应用开发中,它使得服务器能够向客户端实时发送信息,而无需客户端持续轮询。本文将深入探讨Java消息推送的相关知识点,并以名为"PushTalk-...
通过DWR技术,我们可以轻松地在Java Web应用程序中实现服务器端主动推送数据到客户端的功能,从而构建实时通信的应用,比如聊天室。DWR不仅简化了客户端与服务器之间的交互过程,还提高了系统的实时性和用户体验。...
Java信鸽推送是一种广泛应用于移动应用开发中的服务,主要用于实现跨平台的消息推送,包括iOS和Android设备。在本文中,我们将深入探讨如何在Java环境中利用信鸽推送服务进行接口开发,以便有效地向用户发送通知。 ...
Java实现的推箱子游戏是一种基于Java编程语言的趣味性小型游戏,它采用了经典的逻辑谜题——推箱子作为游戏核心。这个游戏的设计目标是通过键盘输入控制角色在特定的地图环境中移动,将箱子推到指定的位置。在这个...
在Java环境中实现APNs推送,我们需要理解其工作原理,并掌握相应的API和技术。 首先,APNs推送的基本流程包括以下步骤: 1. **获取证书**:在Apple Developer后台创建一个Apple Push Services证书,下载.pem文件,...
这个压缩包里面包含三个DOC文件:1.iphone推送java实现.doc 2.iphone推送简单JAVA示例.doc 3.实现iphone推送服务端原理.doc 三个文档很全面的指导学者学习怎么用java实现ios推送功能,不仅仅是讲解怎么实现,还讲解...
Java推箱子游戏是一种基于策略的益智游戏,源自经典的东方文化元素,玩家需要通过移动箱子到达指定位置。在编程领域,实现这样的游戏可以锻炼开发者逻辑思维和问题解决能力。本资源提供了一份用Java语言编写的推箱子...
在Java编程中实现推箱子游戏,可以涉及许多重要的编程概念和技术,如图形用户界面(GUI)、事件处理、数据结构和算法等。下面将详细探讨这些知识点。 首先,Java版的推箱子源码通常会用到Java Swing或JavaFX库来创建...
Java服务端推送技术在Web应用中常常用于实现实时数据传输,例如聊天系统、股票更新、在线游戏等场景。Pushlet是一个基于Java的轻量级推送框架,它允许服务器主动向客户端推送信息,而非传统的HTTP请求-响应模式,即...
在这个“Java实现推箱子小游戏”的项目中,开发者利用Java的强大功能创建了一个经典益智游戏——推箱子。推箱子游戏通常包含一个迷宫般的地图,玩家需要操作主角推动箱子到指定的位置,同时避免陷入困境。 首先,...
在IT行业中,流媒体技术是不可或缺的一部分,尤其是在视频监控领域。海康威视作为全球领先的安防产品和服务提供商,其产品广泛应用于各种场景。本篇文章将深入解析如何利用Java调用海康威视的摄像头,将RTSP(Real ...