linux下perl上的基本聊天系统
我试着写一些基本的聊天系统只是为了学习perl.我试图将聊天记录变成1个文件并打印新消息,如果它出现在chatlog.dat文件中,所以我写了一个功能几乎完全相同的东西,但我有一些问题,不知道如何解决它们.
所以现在我有2个问题! >我无法理解如何使checkFile函数始终处于活动状态(如multiprocession)以持续检查新消息 my ($sec,$min,$hour) = localtime(); while(1){ my $userMessage = <STDIN>; last if $userMessage eq "::quit"; `echo "($hour:$min:$sec): $userMessage" >>chatlog.dat`; } sub checkFile{ my $lastMessage = ""; my $newMessage = ""; while (1) { my $context = `cat chatlog.dat`; split(/n/,$context); $newMessage = $_[$#_]; if ($newMessage ne $lastMessage) { print $newMessage; $lastMessage = $newMessage; } } } 解决方法
第一:
>不要在perl脚本中使用echo.当你有完美的IO例程时,它很难逃脱. 我建议你看看IO :: Handle,并考虑使用flock来确保你已经为IO锁定了文件.您可能还希望考虑File :: Tail. 我实际上建议,你想考虑一种不同的IPC模式 – 因为’文件交换’是非常低效的.如果您真的想要为IO使用文件系统,您可能需要考虑使用FIFO管道 – 让每个“客户端”打开它自己的,并让服务器读取并合并它们. 无论哪种方式 – 您需要使用IO :: Select或者多线程,只需在读写之间来回切换. http://perldoc.perl.org/IO/Select.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |