歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> PERL編程

用Perl 寫不刷屏的聊天室原理分析

  早閒來無事,我也說說編寫不刷屏的聊天室。    首先要說,編寫真正好的聊天室已經超出了CGI的范疇,要求不僅對語言而且對操作系統和網絡協議有一定的了解,需要一些經驗的積累。簡單的說就是編寫端口守護程序,這裡牽扯到socket編程,進程間交互,(二者都是比較古老的技術),以及HTTP協議。前面“天水”同志已經貼出了這部分的C代碼,我只是稍做解釋。聊博高手一哂。1.socket編程,利用UNIX的socket抽象概念打開服務器的一個面向連結的端口,等待外部的聯接請求。    perl語言使用名空間IO::Socket::INET,在新版本的perl中我推薦使用HTTP::Daemon配合HTTP::Request(可以簡化HTTP處理過程)。2.進程間交互,這是實現不刷屏的關鍵所在,socket連結後通常利用子進程完成與用戶的具體交互工作(當client存在,子進程一直與其保持連結,不首先關閉連結),而父進程返回等待其他連結請求。 父進程與子進程間的交互工作通常用管道pipe()來完成,這裡使用單工管道即可,即父-〉子。工作是這樣的:當有內容提交,父進程將它通過管道傳遞給所有存在的子進程(通常保存在hash中),然後子進程分別發給各自的client.看起來不難。    值得注意的問題:一是判斷用戶client是否關閉連結。二是子進程退出後,捕捉$SIG{CHLD}信號。這兩點很重要,開放過多的進程,管道和將大量的信號全都仍給操作系統,它還受得了麼?保存管道的hash也不能越來越大吧?3.HTTP協議,就是分析用戶的HTTP請求,並且返回HTTP應答。    首先看看請求是什麼方式,get還是post,當然還有一些不常用的。get處理起來比較簡單,post要通過head的信息read()body,網上對HTTP具體結構的闡述很多,我就不多說了。值得注意的問題:一個是換行符問題,新手就把它都當作\012\015即可。另一個是HTTP1.1同老板本在處理post時不太一樣。掌握了以上內容,可以嘗試編寫一個簡單的HTTP server,會很有滿足感的^_^ perl繼承了大量的c的*.h,編寫上述問題完全可以勝任,細節都和c很相似,請關注perl朋友,對它有充分的信心!上面說的前兩點都是跟操作系統相關的,NT還不行,我在activeperl5.6上試過,並不像傳說的,有很多問題。不修改代碼直接在NT上使用我們只能期待更完善的activeperl了。錯誤之處請高手糾正,共同進步。




Copyright © Linux教程網 All Rights Reserved