麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

推技術(shù)聊天室的實現(xiàn)(上)

2019-11-18 11:35:18
字體:
供稿:網(wǎng)友

  基于推技術(shù)的聊天室在國內(nèi)現(xiàn)在已經(jīng)比較常見。這種聊天室最大的特點是不使用瀏覽器每格一段時間就刷新的方式,而讓服務(wù)器不定時往客戶端寫聊天的內(nèi)容。當(dāng)有人發(fā)言時,屏幕上才會出現(xiàn)新聊天內(nèi)容,而且聊天內(nèi)容是不斷向上滾動的,假如瀏覽器狀態(tài)欄在的話,可以看到進度條始終處于下載頁面狀態(tài)。即使這種聊天室容納上百人,性能不會明顯的降低。而以往的CGI或活動服務(wù)器端腳本做的聊天室性能明顯就不行了。

  推技術(shù)的聊天室聊天室基本原理是,不使用HTTPD服務(wù)器程序,由自己的Socket程序監(jiān)聽服務(wù)器的80端口,根據(jù)Html規(guī)范,在接收到瀏覽器的請求以后,模擬www服務(wù)器的響應(yīng),將聊天內(nèi)容發(fā)回瀏覽器。在瀏覽器看來就象瀏覽一個巨大的頁面一樣始終處于頁面接收狀態(tài)。也就是說,我們不再使用CGI等方式來處理聊天的內(nèi)容,而采用我們自己的程序來處理所有的事務(wù)。實際上它就是一個專門的聊天服務(wù)器,即一個簡化了的專門用于聊天的WWW服務(wù)器。

  在具體討論程序的實現(xiàn)之前,我們先來解析一下相關(guān)的技術(shù)。

◆http請求和應(yīng)答過程

  http協(xié)議是瀏覽器與WWW服務(wù)器之間通信的標(biāo)準(zhǔn),Socket聊天服務(wù)器應(yīng)當(dāng)遵守這個協(xié)議。實際上,我們只需要使用其中的一小部分就可以了。

  http使用了C/S(客戶/服務(wù)器)模式,其中瀏覽器是http客戶,瀏覽某個頁面實際上就是打開一個Socket連接,發(fā)送一個請求到WWW服務(wù)器,服務(wù)器根據(jù)所請求的資源發(fā)送應(yīng)答給瀏覽器,然后關(guān)閉連接。客戶和服務(wù)器之間的請求和應(yīng)答有一定的格式要求,只要按照這個格式接收請求發(fā)送應(yīng)答,瀏覽器就會正常的顯示你所需要的的內(nèi)容。

  請求和應(yīng)答具有類似的結(jié)構(gòu),包括:

  · 一個初始行

  · 0個或多個header lines

  · 一個空行

  · 可選的信息

  我們看看一個瀏覽器發(fā)出的請求:

  當(dāng)我們?yōu)g覽網(wǎng)頁http://www.somehost.com/path/file.html的時候,瀏覽器首先打開一個到主機www.somehost.com的80端口的socket,然后發(fā)送以下請求:

  GET /path/file.html HTTP/1.0

  From: [email protected]

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

  [空行]

  第一行GET /path/file.html HTTP/1.0是我們需要處理的核心。由以空格分隔的三部分組成,方法(method):GET,請求資源:/path/file.html,http版本:HTTP/1.0。

  服務(wù)器將會通過同一個socket用以下信息回應(yīng):

  HTTP/1.0 200 OK

  Date: Fri, 31 Dec 1999 23:59:59 GMT

  Content-Type: text/html

  Content-Length: 1354

  <html>
  <body>
  <h1>Hello world!</h1>
(其他內(nèi)容)...
  </body>
  </html>

  第一行同樣也包括三部分:http版本,狀態(tài)碼,與狀態(tài)碼相關(guān)的描述。狀態(tài)碼200表示請求成功。
  發(fā)送完應(yīng)答信息以后,服務(wù)器就會關(guān)閉socket。
◆服務(wù)器模型

  一般網(wǎng)絡(luò)服務(wù)器主要分為兩種:

  (1)循環(huán)服務(wù)器(iterative server):它是一個時刻只能處理一個請求的服務(wù)器,多個請求同時到來將會放在請求隊列里。TCP套接字服務(wù)器一般很少采用循環(huán)方式,因為假如某個客戶和服務(wù)器的連接出了問題,會導(dǎo)致整個服務(wù)器掛掉。它常為UDP套接字服務(wù)器所采用。

  (2)并發(fā)服務(wù)器(concurrent server):在每個請求到來以后分別產(chǎn)生一個新進程來處理這個請求所產(chǎn)生的連接。TCP的Socket服務(wù)器大多采用并發(fā)方式提供服務(wù)。

  并發(fā)服務(wù)器有多種實現(xiàn)方法:

  i 服務(wù)器和每個接收到的客戶機進行連接,創(chuàng)建一個新的子進程處理這個客戶機請求。

  ii 服務(wù)器預(yù)先創(chuàng)建多個子進程,由這個子進程處理客戶機請求。這種方式被稱為“預(yù)創(chuàng)建(PRefork)”服務(wù)器。

  iii 服務(wù)器用函數(shù)select實現(xiàn)對多個客戶機連接的多路復(fù)用。

  iv 超級服務(wù)器(inet)激活的服務(wù)器。

  并發(fā)服務(wù)器由于其算法而具有與生俱來的快速響應(yīng)優(yōu)勢,而且當(dāng)某一個用戶與服務(wù)器通信死鎖不會影響其他進程,但由于多個進程之間需要通過進程間通信實現(xiàn)信息交換,而且fork新進程所帶來的開銷隨著用戶數(shù)量的增加越來越大,因此原始的并發(fā)服務(wù)器并不一定是最好的選擇。java語言給我們帶來的方便的線程機制,使我們可以用多線程來代替多進程,實現(xiàn)并發(fā)服務(wù)器,為我們進行快速的商業(yè)版本的聊天室的開發(fā)提供了優(yōu)勢。

  值得注重的是,在linux下,JAVA并沒有實現(xiàn)真正的多線程,本質(zhì)上仍然是多進程。

  ◆POST與GET

  提交form表單信息一般常用的有兩種:POST或者GET。POST由于長度不受限制,而作為大多數(shù)form提交時使用的方法。GET方法通過URL來發(fā)送提交信息,由于URL被WWW服務(wù)器限制了長度,一般最長只能為1024字節(jié),所以假如發(fā)送信息很長的話,就不能使用這種方法。
  由于我們對聊天內(nèi)容有長度限制,不會太長,而且普通瀏覽頁面使用GET方法,使用GET方法提交form表單可以簡化處理過程,所以我們可以使用這種方法來提交聊天內(nèi)容。

  我們感到美中不足的是GET方法將提交的內(nèi)容簡單的附在連接后邊,我們假如能夠?qū)⑻峤坏膬?nèi)容進行HTML編碼的話,就可以讓客戶舒適點了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久91精品国产91久久yfo | 中文字幕在线免费观看电影 | 在线成人免费网站 | 国产精品99精品 | 国产亚洲精品综合一区91 | 久久久久北条麻妃免费看 | 欧美精品一区二区三区久久久 | 毛片av网址| 成人一区二区三区四区 | 日韩黄色成人 | 日韩毛片在线看 | 成人av一区二区免费播放 | 日韩视频在线一区二区三区 | 久久免费视频精品 | 欧日一级片| 福利在线国产 | 亚洲最新黄色网址 | 中国国语毛片免费观看视频 | 久久撸视频 | 国产精品一区在线看 | 国产一区二区影视 | 国产成人在线免费看 | 国产精品区一区二区三区 | 精品一区二区亚洲 | 国产98色在线 | 欧美一级鲁丝片免费看 | 一本色道久久综合狠狠躁篇适合什么人看 | 日日天日日夜日日摸 | 91久久夜色精品国产网站 | 在线高清中文字幕 | 宅男噜噜噜66国产在线观看 | 亚洲国产精品久久久久久久久久久 | 成人黄视频在线观看 | 国产日产精品久久久久快鸭 | 精品一区二区三区四区在线 | 精品国产高清一区二区三区 | 国产精品91久久久 | 亚洲va久久久噜噜噜久牛牛影视 | 一级电影免费在线观看 | 免费国产自久久久久三四区久久 | 一级一级一级一级毛片 |