<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 24  文章 - 6  trackbacks - 0
    <2005年3月>
    272812345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    隨筆分類(23)

    積分與排名

    • 積分 - 13836
    • 排名 - 2084

    最新評論

    Java中的”推”技術(shù)

     bromon原創(chuàng) 版權(quán)所有

      在一般的B/S程序中(最典型的是web服務(wù)),工作的方式是客戶端(brower)向服務(wù)器端(server)發(fā)送一個請求,服務(wù)器端響應(yīng)這個請求并發(fā)回客戶端所請求的數(shù)據(jù)。在這個過程中服務(wù)器端扮演的是一個被動響應(yīng)的角色,一般的情況下,服務(wù)器端是不會主動向客戶端寫數(shù)據(jù)的。由于HTTP是一個無連接的協(xié)議,也就是說當(dāng)服務(wù)器端完成對客戶端的響應(yīng)后,雙方的連接就斷開了,直到下一次客戶端發(fā)出請求時再重新建立連接。這樣的HTTP協(xié)議是節(jié)省網(wǎng)絡(luò)資源的,但是也給我們帶來了一些麻煩,比如客戶端不能實(shí)時探查服務(wù)器端的數(shù)據(jù)變化,不能作出及時的響應(yīng)。所以當(dāng)我們在做一些需要客戶端和服務(wù)器端互相響應(yīng)的程序時(比如聊天室、web短信息),不得不在客戶端不停的刷新頁面,以求獲得最新的數(shù)據(jù),這樣做增加的服務(wù)器的負(fù)擔(dān)。如果服務(wù)器能在數(shù)據(jù)發(fā)生變化的時候主動向客戶端寫數(shù)據(jù),那么問題就解決了,這就是所謂的“推”技術(shù)。

       在java中,客戶端主動向服務(wù)器端申請數(shù)據(jù),叫做“拉”;服務(wù)器主動向客戶端寫數(shù)據(jù),叫做“推”。我們可以在服務(wù)器端打開某個端口,監(jiān)聽客戶端的連接,就可以向客戶端隨意寫數(shù)據(jù),這是我們做C/S程序的原理,“推”技術(shù)采用相同的原理,只是客戶端是瀏覽器而已,只要我們按照瀏覽器能夠識別的格式向客戶端寫數(shù)據(jù),客戶端就可以通過HTTP與服務(wù)器建立連接,并獲得數(shù)據(jù)。
     HTTP是一個很龐大的協(xié)議,但是我們只需要用到很小一部分。最重要的是要知道按照什么格式寫數(shù)據(jù),瀏覽器才認(rèn)識。當(dāng)我們?yōu)g覽一個網(wǎng)站的某一頁,比如www.sohu.com/page.htm的時候,我們是在向服務(wù)器發(fā)送這樣一個信息:

     GET /page.htm HTTP/1.0

     From: someuser@somehost.com

     User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0; DigExt)

     空行

      其中第一行是我們要關(guān)注的,它由空格分隔成三部分,一是請求的方法(get),二是請求的頁面,三是HTTP的版本。如果請求無誤,服務(wù)器將返回如下信息:
     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>
     (其他內(nèi)容)...
     </body>
     </html>

       第一行表示連接成果,然后是返回?cái)?shù)據(jù)的屬性,從<html>開始才是返回給瀏覽器返回的數(shù)據(jù)。在我們自己的程序中只需要按照上述格式寫數(shù)據(jù),就可以實(shí)現(xiàn)一個自己的簡易web服務(wù)器。下面是一個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
     運(yùn)行:java myServer
     然后打開瀏覽器,輸入http://localhost:800,將會返回一個”hello,world”
     以上就是一個“推”技術(shù)的簡單實(shí)現(xiàn),將它擴(kuò)展一下,比如加入多線程響應(yīng),就可以實(shí)現(xiàn)無刷新的聊天室,請讀者自己考慮。

     原文發(fā)表于《程序春秋》0301期 

    posted on 2005-03-28 13:19 Sometimes Java 閱讀(373) 評論(0)  編輯  收藏 所屬分類: Tech Flow
    主站蜘蛛池模板: 亚洲AV无码国产精品麻豆天美| 国产h肉在线视频免费观看| 亚洲高清资源在线观看| 亚洲白色白色永久观看| 无码AV片在线观看免费| 在线亚洲人成电影网站色www | 无码人妻一区二区三区免费n鬼沢| 免费A级毛片无码A| 亚洲美免无码中文字幕在线| 可以免费观看的毛片| 亚洲成AV人网址| 亚洲日韩国产二区无码| 九九精品成人免费国产片| 亚洲熟妇中文字幕五十中出| 久久亚洲AV无码精品色午夜麻豆 | 四虎永久在线精品免费影视 | 国产在线观看免费不卡| 亚洲第一页在线视频| 国拍在线精品视频免费观看 | 亚洲深深色噜噜狠狠网站| 永久在线观看免费视频| 亚洲国产成人精品女人久久久 | 亚洲精品午夜无码电影网| 污污的视频在线免费观看| 18禁网站免费无遮挡无码中文| 国产精品国产亚洲精品看不卡| 一级人做人a爰免费视频| 国产一级理论免费版| a一级毛片免费高清在线| 亚洲国产精品无码久久久久久曰| 久久精品成人免费国产片小草| 亚洲av中文无码| 日韩电影免费观看| 亚洲s色大片在线观看| 性xxxxx免费视频播放| 麻豆一区二区三区蜜桃免费| 免费国产成人高清在线观看麻豆| 中文字幕在线观看免费| 亚洲伊人久久精品影院| 在线看片v免费观看视频777| 免费播放国产性色生活片|