博主做项目遇到了在网页中需要实现在线聊天的功能,我一看,一脸懵逼,完全没有思路,最后得益于万能的百度,终于知道了websocket这种神奇的协议,还知道了WorkerMan这个神奇的PHP socket服务器框架,下面我们来简单聊聊WorkerMan的简单使用,楼主水平有限,如果有错误,欢迎大家在下面的评论区指出~~

1,介绍:Workerman是什么?

Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。

Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的socket服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。

实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协以及各种自定义协议。拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。以上内容来自WorkerMan手册介绍,地址http://doc3.workerman.net/640361

2,环境配置,

Workerman是基于php的,所以我们需要先配置好php环境(配置好的可以忽略),需要配置好环境变量,这个请自行百度解决,使用php -v 查看php 版本,如下图,环境就是配置成功的了,就可以继续下一步的操作!image

3,下载Workerman

到Workerman官网下载Workerman,如下图:
image

4,使用

把下载下来的压缩包解压,并在文件夹中新建一个start.php的文件
image
把以下代码复制进去!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
use Workerman\Worker;

//Autoloader.php路径
require_once "./Autoloader.php";

$global_uid = 0;

// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
function handle_connection($connection)
{
global $text_worker, $global_uid;
// 为这个连接分配一个uid
$connection->uid = ++$global_uid;
}

// 当客户端发送消息过来时,转发给所有人
function handle_message($connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}

// 当客户端断开时,广播给所有客户端
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}

// 创建一个文本协议的Worker监听2347接口
$text_worker = new Worker("text://127.0.0.1:2347");

// 只启动1个进程,这样方便客户端之间传输数据
$text_worker->count = 1;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();

5,运行

在当前文件夹打开终端,并输入php start.php start 打开socket服务,如图:
image
打开多几个客户端并输入命令:telnet 127.0.0.1 2347 测试,如下图,则代表测试成功:
image