Workerman
Workerman学习
Workerman,其实是对底层的socket连接,多进层进行了封装,并不是像yii、thinkphp、zend等常规的mvc框架。对底层的tcp、udp连接进行了封装,在linux上面借助库,能进行进程管理,整体,方便自己创建类似于mqtt一样的上层协议。在使用方面,如果了解psr-4的规范以及composer工具,能很快的导入到项目。在实现方面,使用的事件模型。通过往属性上绑定一些回调函数,进行事件的监听。我常用js,对事件机制接受容易。另外,在chanel方面,个人感觉类似js中,创建一个全局的可监听的对象。
相关资源
安装
快速起步
- webServer示例
use Workerman\WebServer;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 创建一个WebServer监听8080端口,使用http协议通讯
$web = new WebServer("http://0.0.0.0:8080");
//添加域名、文档根目录关系,可添加多个。
$web->addRoot('localhost',__DIR__ . '/test/');
// 运行WebServer
WebServer::runAll();
- http
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://0.0.0.0:2345");
// 启动4个进程对外提供服务
$http_worker->count = 4;
$http_worker->onConnect = function($connection)
{
echo 'connection begin'.PHP_EOL;
};
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function($connection, $data)
{
// 向浏览器发送hello world
$connection->send('hello world');
};
$http_worker->onClose = function($connection)
{
echo 'connection end'.PHP_EOL;
};
// 运行worker
Worker::runAll();
- websocket
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("websocket://0.0.0.0:2000");
// 启动4个进程对外提供服务
$http_worker->count = 4;
$http_worker->onConnect = function($connection)
{
echo 'connection begin'.PHP_EOL;
};
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function($connection, $data)
{
global $http_worker;
// 向浏览器发送hello world
$connection->send(date('Y-m-d H:i:s').$connection->id);
};
$http_worker->onClose = function($connection)
{
echo 'connection end'.PHP_EOL;
};
// 运行worker
Worker::runAll();
客户端对应的js
// 假设服务端ip为127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
console.log("收到服务端的消息:" + e.data);
};
setInterval(function(){
ws.send('1234');
},2000);
总结:两个对象,woker、connection,处理回调函数。
对象
woker
connection