免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2544 | 回复: 5
打印 上一主题 下一主题

进程间无法通过memcache 共享resource问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 19:59 |只看该作者 |倒序浏览
问题如题:

代码如下:

  1. $pid = pcntl_fork();
  2. $memcache = new Memcache;
  3. $memcache->pconnect('localhost', 11211) or die ("Could not connect");
  4. if($pid){
  5.         while(true){
  6.                 sleep(4);
  7.                 if($fp=$memcache->get('fp')){
  8.                         echo "[parent] fp:";
  9.                         var_dump($fp);
  10.                 } else {
  11.                         echo '[parent] none',PHP_EOL;
  12.                 }
  13.         }
  14. } else {
  15.         $fp = fopen('./task.php','r');
  16.         echo "[children] fp:";
  17.         var_dump($fp);
  18.         $memcache->set('fp',$fp);
  19.         echo "[children] get fp:";
  20.         var_dump($f=$memcache->get('fp'));
  21. }
复制代码
输出结果如下:

  1. [children] fp:resource(8) of type (stream)
  2. [children] get fp:int(0)
  3. [parent] none
  4. [parent] none
  5. [parent] none
复制代码
问题:
如何才可以存储资源类型的值?如何满足我这样的需求.多谢了!

另外还有试过Semaphore库中的方法.结果和上面是一样的.


论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2011-12-24 15:04 |只看该作者
你是想让子进程能使用memcache句柄?

论坛徽章:
0
3 [报告]
发表于 2011-12-24 16:30 |只看该作者
准确的说是我想在子进程中创建资源类型的变量在父进程中使用。
场景是我用PHP做TCP服务器,子进程负责接收客户端,并将接收到的客户端连接(SOCKET)存在Memcache中,然后父进程不停的循环,根据连接(socket)取得对应的客户的任务然后在父进程中发送。但在此过程中我遇到无法在父进程中得到子进程中存在memcache中的资源型变量(但字符串,整型等都可以得到,除资源型的得不到)。这就是我现在所面临的问题。

多谢了!

论坛徽章:
0
4 [报告]
发表于 2011-12-26 12:51 |只看该作者
换个思维,你可以在父进程中创建一个缓冲区传给子进程,子进程把收到的数据放到缓冲区里

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
5 [报告]
发表于 2011-12-27 18:29 |只看该作者
回复 3# bjbs_270


    我大致明白你的意思了,不过感觉这个做不到,因为你要存储的是句柄,是依赖于进程的,不同进程句柄权限是独立的,所以应该没办法共享。如果很容易实现共享的话,php就很容易实现数据库缓冲池的概念了。

    不过可以借鉴下第三方数据库缓冲池的做法,你的父进程和子进程都不进行句柄的操作,另外有个特殊进程来进行操作句柄相关的所有操作,这个进程对其他进程提供接口,只存在数据传递。

论坛徽章:
0
6 [报告]
发表于 2011-12-28 09:17 |只看该作者
toinglu1983
多谢了,看来此路不通,你的建议我会尝试一下,思路应该是OK的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP