Java中的”推”技术

原创 2004年06月22日 18:20:00
Java中的”推”技术

 bromon原创 版权所有

 在一般的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>
 第一行表示连接成果,然后是返回数据的属性,从<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("<html><body>");
    ow.write("hello,world");
    ow.write("</body></html>");
    ow.flush();
    socket.close();
   }catch(Exception e)
   {
    System.out.println(e);
   }
  }
 }
 } 


 编译:javac myServer.java
 运行:java myServer
 然后打开浏览器,输入http://localhost:800,将会返回一个”hello,world”
 以上就是一个“推”技术的简单实现,将它扩展一下,比如加入多线程响应,就可以实现无刷新的聊天室,请读者自己考虑。

 原文发表于《程序春秋》0301期 

浅谈分布式消息技术 Kafka

 浅谈分布式消息技术 Kafka You are here:  架构&实践 - 架构 文章 发布于 2017年07月26日  阅读 1617 系统架构...
  • java_2017_csdn
  • java_2017_csdn
  • 2017年07月26日 14:33
  • 596

再谈客户端的 Java 技术

基于服务器的资源那些必须存放在服务器上的资源会怎样呢?这类基于服务器的资源包括地址验证,运输费用计算,以及信用卡验证等。支持数据以及要求高安全度的处理必须放在服务端,但大部分的验证处理,数据转换以及...
  • taocsdn
  • taocsdn
  • 2004年07月11日 14:45
  • 787

利用java、js、html进行客户端工具开发的两个方法

 概要 本文基于客户端检测工具的现实需求,提出了两个利用java/web开发人员普遍熟悉的js、html、java技术,进行客户端工具开发的可行性方案,比较了优缺点,并有demo演示效...
  • zhangerwei
  • zhangerwei
  • 2014年07月02日 17:53
  • 582

java实现WEB服务器客户端技术

  • 2011年05月03日 15:28
  • 1.35MB
  • 下载

直播推流技术及android jni回调java方法总结

》 业内直播推流用2种技术,ffmpeg  推流flv  aac;  librtmp 用adobe公司的非开源库进行推流; 》推流注意问题,音视频同步,推流规格一般是700bps,15fps,vga,...
  • u013316124
  • u013316124
  • 2016年06月30日 22:54
  • 1156

Java中的”推”技术

 在一般的B/S程序中(最典型的是web服务),工作的方式是客户端(brower)向服务器端(server)发送一个请求,服务器端响应这个请求并发回客户端所请求的数据。在这个过程中服务器端扮演的是一个...
  • fightplane
  • fightplane
  • 2008年03月14日 09:50
  • 526

java-基本的Socket编程-实现服务器端和客户端通信

基本的Socket编程: 本实例介绍Socket编程的基本步骤。启动Socket服务后,再打开Socket刻画段,在输入框中输入消息,然后发送给服务器端,服务器端将收到的消息返回到客户端。关键技术:...
  • zlz18225318697
  • zlz18225318697
  • 2016年10月12日 17:48
  • 2859

java中客户端的代码升级

场景:当产品已经打包给客户使用,程序某处出现问题,而这个问题是来自某个类的代码,需要把这个java文件修改后更新给客户。 解决:一种办法是等到下一个升级版本,把bug的解决方案包含到新版本中; 另...
  • u013703363
  • u013703363
  • 2017年03月29日 09:29
  • 483

Java基础-Java中的”推”技术

在一般的B/S程序中(最典型的是web服务),工作的方式是客户端(brower)向服务器端(server)发送一个请求,服务器端响应这个请求并发回客户端所请求的数据。在这个过程中服务器端扮演的是一个被...
  • elivs_wu
  • elivs_wu
  • 2010年07月02日 08:54
  • 163

音视频采集封装到直播推流原理

上次好早之前也写过一篇,随着工作的深入对这块知识又巩固了一遍,算是一个重写和扩展版 旧的总结跳转,那么有啥不同呢? 1. 介绍协议的优缺点以及怎么选择 2. 会介绍压缩编码的原理 ...
  • Cloud_Huan
  • Cloud_Huan
  • 2017年03月30日 11:55
  • 2003
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的”推”技术
举报原因:
原因补充:

(最多只允许输入30个字)