网站首页 > 技术文章 正文
在物联网控制远程硬件的过程中,实时通信是必不可少的。不用实时通信可不可以呢?当然是可以的,但在实际应用中的体验可能就十分的不好了。
试想一下,一个联网电灯,控制端命令发出去,电灯要2到3秒钟以后才能开关。这种体验实在太差劲了,3秒钟,光都可以来回太空1500次啦。
那么我们该如何实现实时通讯呢?
最常用的一种就是Websocket。后端能实现websocket的语方很多,例如Node.js,Go,Python,dotnet core,java。
当然php也可以做到,只是要依赖这篇要展开说的Workerman。
workerman是一个高性能的PHP socket 服务器框架。性能有多高呢?官方测试给出的数据是下面这样的:
测试环境:
系统:ubuntu 12.04 LTS 64位 内存:8G cpu:Intel? Core? i3-3220 CPU @ 3.30GHz × 4
测试结果:
短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开500个线程,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:3W/S , cpu:60% , 内存占用:4*8M = 32M
长链接(每次请求后不关闭链接,下次请求继续复用这个链接): 条件: 压测脚本开1000个线程,每个线程链接Workerman 1次,每个链接发送10W请求 结果: 吞吐量:15.6W/S , cpu:68% , 内存占用:4*8M = 32M
无流量抖动,无内存泄漏,性能非常强悍
小搜选择Workerman的理由不仅是因为它的性能不错,终其原因是:作为使用世界上最好的开发语言之一的我,workerman布署简单,学习成本低是最主要的原因。
说到workerman同学们可能会说swoole也很不错。没错swoole也是个好东西,小搜会开专文来讲述它的。
好了,现在我们开始进入正题,如何使用workerman创建属于自己的websocket服务器。
1.下载workerman
workerman可以到基友站下载,也可以在其官方直接下载。
这里我们在官方网站直接下载,得到一个zip包。
2.部署workerman并编写test.php
解压刚刚下载的zip包到C盘根目录下。
进入workerman-master目录,然后新建一个test.php,内容如下:
<?php use Workerman\Worker; require_once __DIR__ . '/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯 $http_worker = new Worker("websocket://0.0.0.0:2345"); // 启动4个进程对外提供服务 $http_worker->count = 4; // 接收到浏览器发送的数据时回复hello world给浏览器 $http_worker->onMessage = function($connection, $data) { var_dump($data); // 向浏览器发送hello world $connection->send('hello world'); }; Worker::runAll();
3.调试test.php
运行命令行工具并进入c:\workerman-master目录,输入命令php test.php start
看到这样的画面,就证明websocket服务器已经成功建立。接下来我们来测试一下。
从上图可以看出,我们的websocket服务器是正常的,能够收到消息,也能回复消息到客户端。
好啦,今期就到这里啦,感兴趣的朋友可以持续关注小搜获得更多有用的内容,也可以私信小搜,获取源代码哦。
猜你喜欢
- 2024-10-12 41、php多进程基本用法 php多进程编程
- 2024-10-12 使用 Workman 做一个聊天室 wordpress聊天室插件
- 2024-10-12 21、php面向对象例子-类声明与创建
- 2024-10-12 Web-Frameworks - 谁才是最快的 Web 框架
- 2024-10-12 Casbin实战大揭秘:教育培训领域的创新实践和高效优化策略
- 2024-10-12 go 和 php 性能如何进行对比? go跟php
- 2024-10-12 27、php面向对象例子-接口类 php 面向对象
- 2024-10-12 54、php利用信号实现父子进程间通信
- 2024-10-12 24、php面向对象例子-static关键字
- 2024-10-12 分享一个不错的PHP统计监控系统,值得试一下
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)