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

Worker对象

Connection对象

框架集成