2009年4月21日星期二

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

这讲的是 p2p 还是 c/s 模式啊, hehe

2009/4/21 oscar <oscar.wang07@gmail.com>

贴点聊天记录 希望可以拓展大家的思路 , 谢谢了。

2009/4/21 wang oscar <oscar.wang07@gmail.com>
非常感谢,恩  我看了下 5.6.0 以上的ithread 模型 使用 thread:shared 在线程间的数据;
可以共享scalar
如果是hash 或是array的话 其最终也必须是scalar的变量, 这就比较麻烦 ,也为一个socket 是一个对象,不能直接共享。

我主线程中 保存了所有socket 开始以为 既然是线程就可以保留主进程资源的引用,不过载子线程的 在socket->recv 就被阻塞了,其
他的不能调用。

郁闷。

希望大家帮帮忙。


2009/4/21 nsnake <loveme1314@gmail.com>

这个问题解释起来比较复杂,简单点的方法:对于thread来说,最大的好处就是可以变量共享,那么你可以把每个连接的socket存储成唯一的名称保
存到一个公共的变量之中,这样发送的时候只要对该socket发送即可
代码有条件的话可以参考《perl高级编程》里面也有类似的解决方法!


2009-04-21
nsnake
发件人: oscar
发送时间: 2009-04-21  16:20:02
收件人: CGI.NET
抄送:
主题: Re: 请教 : perl thread 处理
兄弟能说的详细些吗?

我的实现是这样的
服务器 A  接收连接 client b 创建一个B线程 并且把client socket 作为参数传进去
                thread b{
                           while(1){
                              $client_b - >recv( $buf , 200);
                               解析$buf;
                              发现要发信息给 client c;
                               # 问题出现了 !!!
                              # 我必须要能调用到client c 的socket 才能给其发送 要传送的信

                              # 没有找到方法实现 -_-||||||
                            }

              }

谢谢大家帮忙了
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: