前言
大多人都习惯用PHP做WEB编程,很少有人用php实现websocket通讯,因为在PHP中,从socket的连接、建立、绑定、监听等都需要开发者自己去操作完成,对于初学者来说,难度方面也挺大的,因此我们用Easyswoole这个框架来实现聊天室的建立。
1、socket协议的简介
2、介绍client与server之间的连接原理
3、PHP中建立socket的过程讲解
4、用一个聊天室作为实例详细讲解在PHP中如何使用socket
WebSocket控制器
EasySwoole 3.x支持以控制器模式来开发你的代码。
首先,修改项目根目录下配置文件dev.php,修改SERVER_TYPE为:
'SERVER_TYPE' => EASYSWOOLE_WEB_SOCKET_SERVER,
并且引入 easyswoole/socket composer 包:
composer require easyswoole/socket
警告:请保证你安装的 easyswoole/socket 版本大 >= 1.0.7 否则会导致ws消息发送客户端无法解析的问题
新人帮助
本文遵循PSR-4自动加载类规范,如果你还不了解这个规范,请先学习相关规则。
本节基础命名空间App 默认指项目根目录下App文件夹,如果你的App指向不同,请自行替换。
只要遵循PSR-4规范,无论你怎么组织文件结构都没问题,本节只做简单示例。
这里的命令解析,其意思为根据请求信息解析为具体的执行命令;
在easyswoole中,可以让TCP、WebSocket像传统框架那样按照控制器->方法这样去解析请求;
请先阅读TCP控制器实现章节,将以简明的文字讲述原理,以下代码较多,主要提供示例。
解析器需要实现EasySwoole\Socket\AbstractInterface\ParserInterface 接口中的decode 和encode方法;
实现命令解析
创建App/WebSocket/WebSocketParser.php文件,写入以下代码
namespace App\WebSocket;
use EasySwoole\Socket\AbstractInterface\ParserInterface;
use EasySwoole\Socket\Client\WebSocket;
use EasySwoole\Socket\Bean\Caller;
use EasySwoole\Socket\Bean\Response;
/**
* Class WebSocketParser
*
* 此类是自定义的 websocket 消息解析器
* 此处使用的设计是使用 json string 作为消息格式
* 当客户端消息到达服务端时,会调用 decode 方法进行消息解析
* 会将 websocket 消息 转成具体的 Class -> Action 调用 并且将参数注入
*
* @package App\WebSocket
*/
class WebSocketParser implements ParserInterface
{
/**
* decode
* @param string $raw 客户端原始消息