首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
Google
首页 入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 Ubuntu 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 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了。错误之处请高手纠正,共同进步。
  
【责编:admin】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·防范Linux病毒 打造没有病毒的乐土…
 ·Linux Shell编程实用指南…
 ·Linux日志分析与管理
 ·揭密Linux内存管理
 ·邮件服务Sendmail应用配置
 ·Linux 安全管理…
 ·Linux 下DNS服务器架设攻略…
 ·Linux 下的路由的配置与应用…
 ·专题:Apache实用手册
 ·全面剖析Linux文件系统
 今日更新
 认证培训
 频道精选
 Windows频道导航