0
点赞
收藏
分享

微信扫一扫

Workerman:PHP的socket框架

小迁不秃头 2021-09-28 阅读 78

hi,我们今天来讲讲Workerman
什么是Workerman呢? 看看官网上的介绍

入门知识


先来点枯燥但又好玩的知识点

1. 什么是HTTP

  • HTTP是一种不保存状态的协议
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型
  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求

下面以我自己的理解哔哔几句


说白了HTTP就是:用TCP 创造一个服务
有客户端连接就发送HTTP头部、响应等等数据
那个客户端就是用户的浏览器
因为是协议 所以跨平台 只要读完HTTP协议的基础 就可以实现浏览器和WEB服务器(相当麻烦
需要考虑n个东西 )

2. TCP具体流程

  • 初始化
    • 创建文件描述符
    • 将当前的文件描述符和 IP/PORT绑定在一起;如果这个端口已经被其他进程占用,bind失败。
    • 声明当前这个文件描述符作为一服务器的文件描述符,为后面的accept做准备
    • 调用accept,并阻塞等待客户端连接
  • 三次握手
  • 数据传输过程
    • 建立连接后,全双工
    • 服务器从accept返回后,立刻调用read(),读socket就像读管道一样,如果没有数据就阻塞等待
    • 这时客户端调用write()发送请求给服务器,对客户端得请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答
    • 服务器调用write(),发送应答数据,再调用read()进行阻塞等待,这时客户端read()返回,发送下一条请求。

上述上述过程是可循环执行的。

  • 四次挥手

首先 我们来下载一下Workerman
我们使用composer官网下期会出这个教程


我们来写个简单的Web Socket聊天室吧

<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// 新建WebSocket协议 端口是2000
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// 启动4个进程对外提供服务
$ws_worker->count = 4;

// 当收到客户端发来的数据后返回给所有客户端
$ws_worker->onMessage = function($connection, $data) use($ws_worker)
{
// 遍历当前进程所有的客户端连接,发送客户端的数据
foreach($ws_worker->connections as $connection)
{
$connection->send($data);
}
};
// 运行worker
Worker::runAll();

启动php 文件名 start


OK出现了以后 表示我们的服务启动了
然后新建一个html文件输入

<script>
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
}
</script>

双击打开



恭喜恭喜 你成功了!

下次详细的讲解Workerman各个方法和函数

求赞 蟹蟹

举报

相关推荐

PHP的Socket函数参考

0 条评论