Workerman:PHP的socket框架
hi,我们今天来讲讲Workerman,什么是Workerman呢? 看看官网上的介绍
Workerman是一款开源高性能异步PHP socket框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件
入门知识

先来点枯燥但又好玩的知识点
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各个方法和函数
求赞 蟹蟹
Workerman:PHP的socket框架的更多相关文章
- 写自己的Socket框架(一)
本系列仅介绍可用于生产环境的C#异步Socket框架,如果您在其他地方看到类似的代码,不要惊讶,那可能就是我在参考开源代码时,直接“剽窃”过来的. 1.在脑海里思考一下整个socket的链接的处理流程 ...
- ZYSocket 4.3.5 SOCKET框架组 发布[NEW]
最新代码请到 github: https://github.com/luyikk/ZYSOCKET 更新 4.3.5更新说明: 修复各种BUG. 重写了一份 protobuf-net 有什么用呢,不需 ...
- atitit.软件开发--socket框架选型--netty vs mina j
atitit.软件开发--socket框架选型--netty vs mina j . Netty是由JBOSS提供的一个java开源框架 Apache mina 三.文档比较 mina文档多,,, 好 ...
- 简洁实用Socket框架DotNettySocket
目录 简介 产生背景 使用方式 TcpSocket WebSocket UdpSocket 结尾 简介 DotNettySocket是一个.NET跨平台Socket框架(支持.NET4.5+及.NET ...
- linux可用的跨平台C# .net standard2.0 写的高性能socket框架
能在window(IOCP)/linux(epoll)运行,基于C# .net standard2.0 写的socket框架,可使用于.net Framework/dotnet core程序集,.使用 ...
- PHP socket Workerman实用的php框架
PHP socket Workerman是一款开源高性能异步PHP socket即时通讯框架. 非常好用的一款框架,可以支持在线聊天,长连接等 用法 官方 https://www.workerman. ...
- 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建
引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...
- 写自己的Socket框架(三)
在通信写完了以后,应用层接收到Socket抛上来的byte[],这个时候对于实际的写逻辑的开发者来说,这样的数据并不友好,我们就需要在应用层统一一个包的规则(应用层协议),处理完以后,然后再传给实际的 ...
- 写自己的socket框架(二)
1.开始正常监听以后,就要开始接受数据了,整体流程图如下: 2.上一节看到我们在程序初始化的时候,初始化了很多个SocketConnection,用于管理客户端的链接,那应用层如何来操作,又什么时候来 ...
随机推荐
- 生成pdf phantomjs
注:原创文件,转载请注明出处 使用phantomjs生成还原度比较高的pdf文件,理论上生成word也可以,因需求没有做这块要求,功课留给大家去做了. 下载 https://phantomjs.org ...
- HTTP头Content-Type类型记录
默认发POST格式 Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlen ...
- 微信小程序一周时间表
<view class="dateView"> <image class="dateLeft" bindtap="prevWeek& ...
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- MySQL--WHERE专题
MySQL进阶----过滤条件 select * from ... where ...; 通常我们并不需要查看一个表的所有行,我们需要查看的是具备某种条件的行.前面MySQL使用的基础学习中,就使用过 ...
- Golang+chromedp+goquery 简单爬取动态数据
目录 Golang+chromedp+goquery 简单爬取动态数据 Golang的安装 下载golang软件 解压golang 配置golang 重新导入配置 chromedp框架的使用 实际的代 ...
- [UNP] IO 复用
UNP Part-2: Chapter 6. I/O Multiplexing: The select and poll Functions 的读书笔记. 在 这篇博客 的最后,我们对文章中的服务器- ...
- IT求职 非技术面试题汇总
原文链接:https://blog.csdn.net/weixin_40845165/article/details/89852397 说明:原文是浏览网页时无意间看到的.扫了一眼,总结得还不错,感谢 ...
- Java 并发编程之 Condition 接口
本文部分摘自<Java 并发编程的艺术> 概述 任意一个 Java 对象,都拥有一个监视器方法,主要包括 wait().wait(long timeout).notify() 以及 not ...
- python列表,元组,字典,集合的比较总结
这四个都是python中的序列,用于存放数据,他们区别总结如下: 列表list 元组tuple 字典dictionary 集合set 是否可变 可变 不可变 可变 可变 是否有序 有序 有序 无序 ...
