2009年4月23日星期四

[PerlChina] Re: 请教 : perl thread 处理

实现主要是C/S

server 接受 各客户端的请求 ,各客户端发送的聊天消息,服务器主要是做dispatch 分发消息的功能

我想了下 服务器可以用select 来监听所有的handle
获得 所有 准备发送消息的client
分发 时准备 多线程处理 每个分发处理

各客户得到消息,显示消息。

主要问题是线程共享不了复杂数据,只能share标量 和共享变量 。这不是很鸡肋吗。

我想到了子线程应该可以获得父线程的资源,不过好像不大行。

探索中。先谢谢各位的帮助。

On Apr 22, 1:15 pm, purl lamp <lamp.p...@gmail.com> wrote:
> 阻塞的反义词并非就是多线程,还有多线索。
> 这个领域的选择就很多了。
>
> POE, Coro 都是可以考虑的多线索框架,都比 select 走的更远,也更容易写出成熟的程序。
>
> http://search.cpan.org
>
> 2009/4/22 q11112...@gmail.com <q11112...@gmail.com>
>
> > 请问你打算怎么显示消息。如果是在命令行消息立即显示就会冲掉正在输入的内容。这样就会显示有问题。你是怎么实现的。能不能新打开一个console或
> > shell专门用来显示信息。另外一个专门用来输入信息。用什么方法打开一个console窗口并把句柄传进去。或者在进程内部执行一个perl
> > script,用这个script来处理所有socket,来输出消息。
> > 我现在也在写这个。我使用select来处理accept。我想用tcp实现聊天。当然发送信息只用到socket,就不用select。发送消息
> > syswrite不行?不用阻塞。显示消息也要select,
>
> > On Apr 21, 2:59 pm, oscar <oscar.wan...@gmail.com> wrote:
> > > 这几天学习perl thread ,版本是5.10 ,我做了个与socket结合聊天的小例子,一个socket server , 每个监听到的
> > > client, 服务器都会创建一个thread去接受client 的信息。
>
> > > 情景: 我想实现一个client 可以选择聊天的对象, 我的想法是将所有的client发在一个hash 中, 当一个聊天的请求到来时,在这个
> > > hash中找到对应的client socket 进行发送。因为这个hash是主线程的,应该都可以访问到。
>
> > > 问题:1 这个client socket 可能同时发生 接收和发送的信息的并发, 会产生错误,
> > > 2 我如何实现这种聊天情况
>
> > > 补充 : 我不想用IO::select 轮询
>
> > > 谢谢各位。
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: