发信人: tanshuai()
整理人: workingnow(2002-10-30 13:51:57), 站内信件
|
今早闲来无事,我也说说编写不刷屏的聊天室。
首先要说,编写真正好的聊天室已经超出了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了。
错误之处请高手纠正,共同进步。
-- CGI版主(BM) —— ☆★天水★☆ №↑1.
☆网络世界,你我共行,创出新意,创出未来,创出新世界!★
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
□E-Mail: [email protected] 【Http://ts.cncenter.com】
〓I Seek You!ICQ UIN : 25856530 (AOL) OICQ ID:66552
'''''''''''''''''''''''''''''''''''''''''''''''''''''
※ 修改:.tanshuai 于 May 8 19:19:32 修改本文.[FROM: 202.96.86.38] ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.86.38]
|
|