Workerman学习

Workerman是一款开源高性能异步PHP socket即时通讯框架。下面通过一些简单的例子来学习。

1. 使用HTTP协议对外提供Web服务

创建http_test.php文件,内容如下:

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

//创建一个Worker监听2345端口,使用http协议
$httpWorker = new Worker('http://0.0.0.0:2345');
//启动4个进程对外提供服务 
$httpWorker->count = 4;

//接收到浏览器发送的数据时回复hello world给浏览器
$httpWorker->onMessage = function($connection,$data){
    //向浏览器发送hello world
    $connection->send('hello world');
};

//运行worker
Worker::runAll();

命令行进入http_test.php目录,并执行以下命令:

php http_test.php

浏览器中输入http://127.0.0.1:2345 页面会显示hello world

2. 使用WebSocket协议对外提供服务

创建ws_test.php文件,内容如下:

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

//创建一个Worker监听2345端口,使用websocket协议
$httpWorker = new Worker('websocket://0.0.0.0:2000');
//启动4个进程对外提供服务 
$httpWorker->count = 4;

//接收到浏览器发送的数据时回复hello world给浏览器
$httpWorker->onMessage = function($connection,$data){
    //向浏览器发送hello $data
    $connection->send('hello '.$data);
};

//运行worker
Worker::runAll();

命令行进入ws_test.php目录,并执行以下命令:

php ws_test.php

新建ws_test.html文件,内容如下:

<script>
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("连接成功");
    ws.send('tom');
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};
</script>

双击打开ws_test.php,页面将弹出窗口提示连接成功,并继续弹出收到的服务端的消息。

3. 直接使用TCP传输数据

创建tcp_test.php,内容如下:

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

//创建一个Worker监听3000端口,使用tco协议
$httpWorker = new Worker('tcp://0.0.0.0:3000');
//启动4个进程对外提供服务 
$httpWorker->count = 4;

//接收到浏览器发送的数据时回复hello world给浏览器
$httpWorker->onMessage = function($connection,$data){
    //向浏览器发送hello $data
    $connection->send('hello '.$data);
    error_log($data."\r\n",3,'1.txt');
};

//运行worker
Worker::runAll();

命令行进入tcp_test.php目录,并执行以下命令:

php tcp_test.php

打开cmd命令,输入telnet 127.0.0.1 3000
每敲击一个字符,即可收到返回信息。如果希望发送完整的字符串信息,则先按快捷键:Ctrl+],进入命令行模式,然后输入send+字符串:send 字符串,按回车即可。
打开文件同目录下的1.txt可以看到发送的内容。

发表评论

邮箱地址不会被公开。 必填项已用*标注