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,用于管理客户端的链接,那应用层如何来操作,又什么时候来 ...
随机推荐
- TERSUS无代码开发(笔记04)-CSS样式设置
CSS样式设置 1.常用显示样式 大小尺寸 说明 间距边距 说明 各类颜色 说明 width 宽 margin 外边距 color 颜色 height 高 pad ...
- Glibc堆管理机制基础
最近正在学习linux下堆的管理机制,收集了书籍和网络上的资料,以自己的理解做了整理,做个记录.如果有什么不对的地方欢迎指出! Memory Allocator 常见的内存管理机制 dlmalloc: ...
- 用Vue3构建企业级前端应用,TS能让你更轻松点
摘要:Vue 3已经发布有一段时间了,到底有哪些新特性值得关注,如何用它构建企业级前端项目,怎样快速上手Vue 3?本篇文章将对此进行详细讲解. 前言 工欲善其事,必先利其器 --<论语> ...
- 创建AD域之后设置DNS服务访问外网
AD域内需要有DNS服务器,用于解析域内的计算机名,域内的计算解析公网的域名需要设置一个转发器(Forwarder). 一定要设置好自己的默认网关.DNS因为部署在AD服务器上,直接loopback地 ...
- Coposition 详解
LifeCycle Hooks 在新版的生命周期函数,可以按需导入到组件中,且只能在setup()函数中使用. import { onMounted, onUnmounted } from 'vue' ...
- Java数组之二分查找
简单的二分查找 package com.kangkang.array; public class demo03 { public static void main(String[] args) { / ...
- const成员函数可以将非const指针作为返回值吗?
先给出一段代码 class A { int *x; public: int *f() const { return x; } }; 成员函数f返回指向私有成员 x 的非常量指针,我认为这会修改成员x ...
- dubbo实战之一:准备和初体验
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 第十届蓝桥杯省赛-试题E: RSA 解密
试题E: RSA 解密 这里涉及到很多数论的知识:质因子分解,扩展欧几里得算法,快速幂算法,利用快速乘算法求解快速幂(mod太大导致不能直接乘,而是需要使用加法来替代乘法) 另外还需要注意扩展欧几里得 ...
- 如何在 C# 中使用 const,readonly,static
平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论 C# 中 ...