动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Oracle数据库的系统性能优化策略.
.buffer cache深度分析之buffer c.
.手工设定 LILO.
.Oracle Database缓冲区漏洞.
.复杂查询语句的使用.
.RMAN自动备份的脚本(windows环境).
.利用Oracle自带的连接池类的一例.
.oracle数据库备份与恢复 a piece.
.ZT:Oracle PL/SQL入门之慨述.
.ORACLE标准产品服务核心价值概述.
.Oracle 数据库向 MS SQL Server .
.用Oracle Materialized views动态.
.Oracle 数据库的配置方案 完全分.
.如何在相对空闲的rac实例中强制自.
.常见数据库系统之比较 Oracle数据.
.Oracle数据库的ORA-00257故障解决.
.Windows NT平台下Oracle优化策略.
.SCO UnixWare 7.1.3下安装Oracle.
.怎样看oracle查询语句执行计划?.
.推荐精华文章:Oracle数据库高手.

如何在Linux系统下实现Server Push

发表日期:2008-2-9 |



  由于Linux的开放性,极大激发了程序员的创造力,使得以Linux为作业平台的新技术不断出现。Server Push(推技术)就是其中一例。它可在完全不增加成本的基础上,使网站达到最佳的性能。本文将对其进行具体介绍。
  
    一、环境配置
  
    为了在Linux下更充分领略Server Push的功能,在运行环境上,我们需进行一些选择。
  
    1.WWW服务器
  
    首先要在Linux上安装Apache,以便能自由编译功能模块,这样可以充分使用Server Push、FastCGI、EPerl和PHP等新的扩展功能。
  
    2.脚本支持
  
    笔者推荐用Perl或C语言来写CGI脚本,因为Perl已经是CGI脚本程序事实上的标准。而且在Perl 5中已经可以直接调用 C子程序而不需要任何声明。不管你用什么语言来写CGI脚本,解释器中应该有CGI.PM模块,笔者试用的版本是 5.004,这一模块的更新版大家可以从网上下载。
  
    二、程序实例及函数剖析
  
    好了,有了上面的工具,下面我们就来写一个Server Push程序来说明它的实现过程:
  
    #!/usr/bin/perl
  
    use CGI qw/:push -nph/;
  
    $ = 1;
  
    print multipart—init(-boundary=〉′--boundary′);
  
    while (1) {
  
    print multipart—start(-type=〉′text/plain′),
  
    ″The current time is ″,scalar(localtime),″\n″,
  
    multipart—end;
  
    sleep 1;
  
    }
  
    程序第二行告诉CGI解释程序来调用支持Server Push 的功能模块(CGI.PM),在这个模块中预先定义了三个函数:multipart—init()、multipart—start()和multipart—end,只要在程序中有use CGI qw/:push -nph/声明,就可以直接使用这三个函数。
  
    multipart—init()函数的作用是声明一个文档类型,就像普通的CGI程序中的“Content-Type: text/Html”声明,告诉服务器下面传送的是HTML文档,而multipart—init()这一函数声明的文件类型却是实现Server Push最根本的方法类型:
  
    Content-Type: multipart/x-mixed-replace; boundary=′--boundary′
  
    假如你对HTTP的MIME类型有具体的了解,你就知道multipart 类型是一种复合类型,它的子类型是mixed,子类型的X参数,大家可以参看具体的MIME类型说明,这里最要害的是replace方法,它不停地用新接收的数据更新旧的数据,这就是 Server Push最大的技术内涵。boundary只是一个边界值,告诉浏览器从这儿开始,使用Server Push方法了。其实你完全可以这样理解,只要在脚本程序中声明了如multipart/x-mixed-replace 这样一个文档类型,服务器就和客户机建立了一个非凡的连接。服务器就不断地把客户机请求的数据源源不断地推向了客户机。而传统的 Client PULL方法则是:
  
    1.Client 和Server建立连接
  
    2.Client发送请求到Server
  
    3.Server响应请求
  
    4.Server 断开连接以响应下一请求。
  
    通过这两种方法的比较,大家可以看出Server Push优点主要在于服务器和客户机之间这种不间断的连接方式,使它不需要采用Client PULL的〈META http-equiv=refresh content=″n″〉这种方法来刷新页面,不仅更新速度快,而且不会产生闪动效果。
  
    假如你不用multipart—init()而直接在脚本程序中用以下语句也可以达到同样目的:print ″Content-Type: multipart/x-mixed-replace; boundary=′boundary′\n\n″。当系统不支持multipart—init()函数时,就可以直接这样声明。
  
    multipart—start() 这个函数是为服务器指定了传送一个确定的文档,假如不用这个函数,根据脚本程序的内容服务器可以直接把指定数据传送给客户机,当然客户机不能识别这种类型的文档可以忽略而不会产生错误。但假如你指明了具体的文档类型,如例程中的text/plain(纯文本类型),客户机就不再对文档加以分析,从而提高了处理速度,否则客户机只知道传送过来的是 multipart(复合型)而要重新对其分析。
  
  
    至于multipart—end函数不需作具体说明,只是说明了一个 Push过程的结束。  
  
    为了使大家能更好地理解这三个函数具体的技术内容,笔者把这三个函数的实现过程介绍给大家:
  
    sub multipart—init {
  
    my($self,@p) = self—or—default(@—);
  
    my($boundary,@other) = $self-〉rearrange([BOUNDARY],@p);
  
    $boundary = $boundary ′------- =—aaaaaaaaaa0′;
  
    $self-〉{′separator′} = ″\n--$boundary\n″;
  
    $type = Server—Push($boundary);
  
    return $self-〉header(
  
    -nph =〉 1,
  
    -type =〉 $type,
  
    (map { split ″=″, $—, 2 } @other),
  
    ) . $self-〉multipart—end;
  
    }
  
    sub multipart—start {
  
    my($self,@p) = self—or—default(@—);
  
    my($type,@other) = $self-〉rearrange([TYPE],@p);
  
    $type = $type ′text/html′;
  
    return $self-〉header(
  
    -type =〉 $type,
  
    (map { split ″=″, $—, 2 } @other),
  
    );
  
    }
  
    sub multipart—end {
  
    my($self,@p) = self—or—default(@—);
  
    return $self-〉{′separator′};
  
    }
  
    三、应用技巧
  
    使用Server Push的其它技巧,限于篇幅,笔者不再作过多的介绍。不过有时由于客户机在一段时间内没有对服务器发生请求,也就是若一段时间内没有新的内容向浏览器输入,可能发生连接超时现象,用下面的程序来处理一下就能很好地解决:
  
    $message=1;
  
    $whilecount=1;
  
    do {
  
      主程序;
  
      $message++;
  
      }
  
    if ($whilecount == 30)
  
    {
  
    print ″〈SCRIPT〉$message〈/SCRIPT〉\015\012″;
  
    $whilecount = 0;
  
    }
  
    $whilecount++;
  
    sleep 1;
  
    这种技巧大家一看就明白了,正如很多 FTP软件的Loop一样,在空闲时发一个空信号,不让程序进入等待状态。这段程序每过30秒就给客户机输出一行〈SCRIPT〉$message〈/SCRIPT〉,而$message是数值1、2、3等,这一行在浏览器浏览时并不显示任何内容,让浏览者感觉不到。
上一篇:配置XDM--一种Linux的图形登录界面 人气:683
下一篇:在Linux中方便地使用不同X-Windows窗口管理器 人气:476
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-28 迅易评选管理系统 v9.3
2008-8-28 OpenX(广告管理系统) v2.6.1 多国
2008-8-28 雨点单用户免费留言板 v2.0 Buil
2008-8-28 APJE私服发布系统 v2.1 ASP版
2008-8-28 酷维CMS企业网站程序 v1.0
2008-8-27 风讯dotNETCMS v1.0 SP3 SQL/ACC
2008-8-27 风讯dotNETCMS v1.0 SP3 源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵