魏长东

weichangdong

php长连接workerman学习

在linux虚拟机环境下安装了workerman,开始不知道从哪开始,最后自己搞了几个文件,折腾出了几个效果。

虽然暂时不知道内部代码是咋实现的,但是表面的应用层算是知道了点皮毛。

启动的效果(因为是监听不同的端口,所以虽然启动了两个,也不冲突,I think)。

workerman-0.jpg

显示http的形式:
建立了一个http.php文件。代码都是来自workerman的说明文件。

<?php
require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// #### http worker ####
$http_worker = new Worker("http://127.0.0.1:10000");
$http_worker->count = 4;
$http_worker->onMessage = function($connection, $data)
{
    // send data to client
    $connection->send("hello world $data\n");
};

// run all workers
Worker::runAll();
我的理解是当127.0.0.1的10000端口有数据的话,就会给他返回hello world加上发送过来的数据(经自己
测试,还会返回http的头信息)。

这是我给这个端口发送数据,通过http的形式。

workerman-1.jpg

可见,效果达到了。

第二个测试的例子:

test.php文件

<?php
require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// #### create socket and listen 1234 port ####
$tcp_worker = new Worker("tcp://127.0.0.1:10005");
//create 4 hello_worker processes
$tcp_worker->count = 4;
// when client send data to 1234 port
$tcp_worker->onMessage = function($connection, $data)
{
    // send data to client
    $connection->send("weichangdong $data \n");
};

Worker::runAll();

这个客户端,是要通过tcp向10005这个端口写数据,我是用php的socket实现的。

通过连接127.0.0.1的10005的端口,创建socket套接字,然后给发送信息,具体代码和我上一篇文章的client.php一样。这就不贴了。

直接给执行的效果。其中,【weichangdong】这字符是上面的test.php返回的。后面的字符串是我通过10005端口向服务器发送的。

workerman-2.jpg

 

算是小窥门径,以后有用到的地方在深入研究。