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可以看到发送的内容。