前言

众所周知,PHP用于开发基于HTTP协议的网站应用非常便捷。而HTTP协议是一种单向的通信协议,只能接收客户端的请求,然后响应请求,不能主动向客户端推送信息。因此,一些实时性要求比较高的应用,如实时聊天、直播应用、在线网页游戏等,就不适合采用HTTP协议。即使采用客户端主动轮询的方式来间接实现双向通信,也会较大地增加服务器的负担,增大代码的复杂性,不利于维护。

双向通信

那么,是否PHP就无法用来开发双向通信的应用呢?

答案是否定的。PHP内置socket通信支持,可以与linux程序基于socket进行双向通信。php swoole框架封装了一个websocket服务端,基于此可以很方便地建立一个与html5的websocket客户端进行通信的服务。

一、Swoole介绍

swoole

Swoole是一个面向生产环境的 PHP 异步网络通信引擎,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升。

swoole支持用于搭建多种server,包括http server、websocket server、tcp server、redis server等等。这里我们使用到的是其中的websocket server。

二、WebSocket介绍

WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

简单地来说,websocket协议实现了浏览器和服务器之间的双向通信。而html5原生支持websocket协议。

三、swoole websocket 服务端demo

1.安装swoole

swoole以php扩展的形式进行加载,首先需要为你的php安装swoole扩展,安装命令如下:

pecl install swoole

安装成功后在php.ini文件加上extension=swoole.so加载扩展

2.启动服务端

新建一个php文件,文件名为server.php,文件内容如下:

$server = new SwooleWebSocketServer("0.0.0.0

PHP 接收 UDP包_php只能做网站?基于swoole+websocket开发双向通信应用相关推荐

  1. PHP 接收 UDP包_PHP早已不是十年前的鸟样!!!

    开发者 Brent 发布了一篇文章,详细介绍了 2019 年的 PHP 是怎么样的. Brent 承认 PHP 当前仍然存在一些问题,比如许多核心函数仍然有不一致的方法签名.配置设置还是令人困惑,但是 ...

  2. mysql for循环_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

  3. mysql异步扩展_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

  4. 使用php开发,基于swoole扩展开发的工具 swoole-crontab

    2019独角兽企业重金招聘Python工程师标准>>> 使用php开发,基于swoole扩展开发的工具 swoole-crontab https://www.oschina.net/ ...

  5. PHP 接收 UDP包_UDP详解(广播,组播)(转)

    先转载一位大佬对UDP的解说.再测试一下广播和多播 原文:https://www.cnblogs.com/HPAHPA/p/7737531.html 广播多播测试代码 链接: https://pan. ...

  6. esp8266 接收udp广播_ESP8266_21基于ESP8266的一键配网

    这一节,说一下一键配网的用法.首先说为什么需要一键配网? 原因很简单,因为设备要上网.那,给那些设备配一个屏幕和一个输入设备行不行? 不是不可以,对那些成本没要求的设备是没问题的.但物联网设备大部分都 ...

  7. 如何在Linux命令行下发送和接收UDP数据包

    众所周知,在传输层有两个常用的协议 TCP 和 UDP,本文介绍在 Linux 命令行下,如何使用 nc 命令发送或接收 UDP 数据包,这些命令的用法对调试 UDP 通信程序将有所帮助. 1. 问题 ...

  8. 无连接应用程序丢包率测试/UDP丢包率测试【基于数据报套接字的网络程序设计】

    目录 一.无连接应用程序丢包率测试 二.UDP 丢包率测试服务端 三.UDP丢包率测试客户端 四.用户使用说明(输入 / 输出规定) 五.部分运行结果 六.UDP 丢包率的测试结果分析 (1)讨论服务 ...

  9. 【Java 网络编程】UDP 服务器 客户端 通信 ( DatagramSocket | DatagramPacket | UDP 发送数据包 | UDP 接收数据包 | 端口号分配使用机制 )

    文章目录 I UDP 信息发送接收原理 II UDP 发送和接收端口相同 III UDP 发送信息代码示例 IV UDP 接收信息代码示例 V UDP 服务器端代码示例 VI UDP 客户端代码示例 ...

最新文章

  1. AI一分钟|Uber撤裁100名无人车操作员;京东金融将融资130亿人民币
  2. PowerShell收发TCP消息包
  3. 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
  4. 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
  5. ACE源代码目录结构
  6. 一致性协议raft详解(二):安全性
  7. 房费制 它 结账BUG
  8. AWT_addKeyListener键盘监听事件(Java)
  9. 拓端tecdat|R语言分段线性回归分析预测车辆的制动距离
  10. Consul添加配置详解
  11. Android Lolipop 屏蔽隐式Intent检查引发的错误
  12. tensorrt 分割_超多,超快,超强!百度飞桨发布工业级图像分割利器PaddleSeg
  13. java 开发电商平台,JAVA项目实战开发电商项目案例(一)前后端项目分离
  14. 前馈反馈仿真matlab,前馈-反馈控制系统的具体分析及其matlab/simulink.pdf
  15. latex常用中文模板,拿走直接很使用
  16. [转]短信验证码如何防止不恶意点击被刷!
  17. ES改变主分片数量,动态拆分primary shard
  18. Proteus仿真51单片机入门
  19. 解决 `Failed to connect to github.com port 443: Connection refused`
  20. 初识二维码 第二讲 二维码的结构

热门文章

  1. 谈谈“学习”这件事儿
  2. Dapper介绍--Micro-ORM
  3. 推荐VSCode多语言开发,支持一键JAVA
  4. 使用Nexus搭建私有Nuget仓库
  5. .NET Core 2.0迁移技巧之web.config配置文件
  6. [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比
  7. 【干货】”首个“ .NET Core 验证码组件
  8. ASP.NET Core 1.0中的管道-中间件模式
  9. 利用redis List队列简单实现秒杀 PHP代码实现
  10. 提交Form表单,submit之前做js判断处理