2、Workerman 基本使用 - Workerman 安装与简单介绍

作者: 温新

图书: 【Workerman 基本使用】

阅读: 464

时间: 2024-11-23 16:18:54

hi,我是温新,一名 PHPer

安装扩展

安装 workerman 之前,先安装如下扩展:

  • pcntl
  • posix
  • event(可选,建议安装安装)

怎么安装这些扩展就不介绍了,官方文档有教程。

安装 Workerman

Workerman 是一个扩展包,因此,composer 下来就是安装完成。

$ mkdir wm-study && cd wm-study
$ composer require workerman/workerman

这样,Workerman 就已经安装好了。

Workerman 简单案例

打开下载下来的 Workerman 一看,有点蒙圈,怎么使用?下载下来后,一切功能的实现都需要我们自己去写了。

1)创建启动程序的文件

根目录下创建 test-start.php,内容如下:

<?php
// wm-study/test-start.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;

require_once __DIR__ . '/vendor/autoload.php';

$web = new Worker('http://0.0.0.0:8888');

$web->onMessage = function (TcpConnection $connection, Request $request) {
    $connection->send('<h1>Hello Workerman</h1>');
};

Worker::runAll();

2)启动服务

$ php test-start.php start

3)测试服务

$ curl 127.0.0.1:8888
<h1>Hello Workerman</h1>

当然了,也可以使用浏览器来访问查看效果。

Workerman 中的两大类

Connection 类

Connection 类用于客户端的连接,每一个客户端连接都对应了一个 Connection 对象。可以设置该对象的 onMessage、onClose 等回调,同时提供了向客户端发送数据 send 接口与关闭连接 close 接口,以及其它一些必要的接口

Worker 类

Worker 类用于实现端口的监听,并可以设置客户端连接事件、连接上消息事件、连接断开事件的回调函数,从而实现业务处理。

总结下来,就是 Connection 负责客户端连接,Worker 类负责工作。

Workerman 目录结构

为了避免偷懒,还是来了解一下 Workerman 文件的相关作用吧。

Workerman                      // workerman内核代码
    ├── Connection                 // socket连接相关
    │   ├── ConnectionInterface.php// socket连接接口
    │   ├── TcpConnection.php      // Tcp连接类
    │   ├── AsyncTcpConnection.php // 异步Tcp连接类
    │   └── UdpConnection.php      // Udp连接类
    ├── Events                     // 网络事件库
    │   ├── EventInterface.php     // 网络事件库接口
    │   ├── Event.php              // Libevent网络事件库
    │   ├── Ev.php                 // Libev网络事件库
    │   ├── Swoole.php             // Swoole网络事件库
    │   └── Select.php             // Select网络事件库
    ├── Lib                        // 常用的类库
    │   ├── Constants.php          // 常量定义
    │   └── Timer.php              // 定时器
    ├── Protocols                  // 协议相关
    │   ├── ProtocolInterface.php  // 协议接口类
    │   ├── Http                   // http协议相关
    │   │   ├── Chunk.php    // http chunk类
    │   │   ├── Request.php  // http 请求类
    │   │   ├── Response.php  // http响应类
    │   │   ├── ServerSentEvents.php  // SSE类
    │   │   ├── Session
    │   │   │   ├── FileSessionHandler.php  // session文件存储
    │   │   │   └── RedisSessionHandler.php // session redis存储
    │   │   ├── Session.php  // session类
    │   │   └── mime.types   // mime映射文件
    │   ├── Http.php               // http协议实现
    │   ├── Text.php               // Text协议实现
    │   ├── Frame.php              // Frame协议实现
    │   └── Websocket.php          // websocket协议的实现
    ├── Worker.php                 // Worker
    ├── WebServer.php              // WebServer
    └── Autoloader.php             // 自动加载类
请登录后再评论