php socket 多线程编程,php socket多线程服务器的实例分享

php支持socket,提供了socket的所有接口,可以实现一对一的通信。

php语言不支持线程,这里模拟了一个多线程代码(基于web服务器支持多线程)。

例子:

/**

* socket 多线程

* edit by www.jbxue.com

*/

function runThread()

{

$fp = fsockopen('localhost', 80, $errno, $errmsg);

fputs($fp, "GET /a.php?act=brnrn"); //这里的第二个参数是HTTP协议中规定的请求头

//不明白的请看RFC中的定义

fclose($fp);

}

function a()

{

$fp = fopen('result_a.log', 'w');

fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");

fclose($fp);

}

function b()

{

$fp = fopen('result_b.log', 'w');

fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");

fclose($fp);

}

if(!isset($_GET['act'])) $_GET['act'] = 'a';

if($_GET['act'] == 'a')

{

runThread();

a();

}

else if($_GET['act'] == 'b') b();

?>

说明:

以上代码,虽然实现了多线程,但这些线程的通信是网页之间的通信,有session机制,http是无状态的协议,不保存用户信息,可以用session进行变量传递,而且,还有序列号,让变量序列号存在某个文件里面或者数据库里面,都是可以实现的。

socket_create/socket_accpet返回值都是一个resource指针。

serialize() 可处理除了 resource 之外的任何类型。

对于session传递,根本不可行,传递过去之后引用计数就随着之前的页面资源的卸载而销毁了。

页面传递是根本不可能传递资源类型的。

总结:

1,php要实现多线程,就得靠web服务器,本身没有,但是这样就必须要实现资源指针在网页之间互传。

2,资源指针是不能实现网页之间互传的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值