php支持socket,提供了socket的所有接口,可以实现一对一的通信。
php语言不支持线程,这里模拟了一个多线程代码(基于web服务器支持多线程)。
例子:
<?php /** * socket 多线程 * edit by www.jb200.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,资源指针是不能实现网页之间互传的。