当前位置: 首页 > news >正文

使用swoole websocket 实现执行console php文件 把输出返回给浏览器

 1 swoole websocket 服务端
 2 <?php
 3 $server = new swoole_websocket_server("0.0.0.0", 9501);
 4 
 5 $server->on('open', function (swoole_websocket_server $server, $request) {
 6         echo "server: handshake success with fd{$request->fd}\n";
 7 });
 8 
 9 $server->on('message', function (swoole_websocket_server $server, $frame) {
10         #echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
11         if ($frame->data == 1) {
12                 $handle = popen('php ./console.php', 'r');
13              while (!feof($handle)) { $content = fgets($handle);
14                         $server->push($frame->fd, $content);                        
15                 }
16                 pclose($handle);
17         }
18 });
19 
20 $server->on('close', function ($ser, $fd) {
21         echo "client {$fd} closed\n";
22 });
23 
24 $server->start();
 1 console.php脚本
 2 <?php
 3 
 4 echo '12'.PHP_EOL;
 5 echo '34'.PHP_EOL;
 6 
 7 sleep(10);
 8 echo '56'.PHP_EOL;
 9 echo '78'.PHP_EOL;
10 sleep(10);
11 echo 'exit';
 1 前端脚本
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 8     <title>Document</title>
 9 </head>
10 <body>
11     测试swoole websocket
12     <button type="button" class="btn btn-large btn-block btn-default" id="btn">点我</button>
13     <div id="show">
14 
15     </div>
16     <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
17     <script>
18         const socket = new WebSocket('ws://www.swoole-test.com:9501');
19 
20         // Connection opened
21         socket.addEventListener('open', function (event) {
22             socket.send('Hello Server!');
23         });
24 
25         // Listen for messages
26         socket.addEventListener('message', function (event) {
27             var data = event.data;
28             console.log(data);
29         });
30 
31         $("#btn").on('click', function() {
32             socket.send(1);
33         });
34     </script>
35 </body>
36 </html>

执行swoole脚本 打开浏览器控制台 观察效果

转载于:https://www.cnblogs.com/a-flydog/p/7073764.html

相关文章:

  • 复习
  • 初识activiti
  • canves 画视频
  • CentOS6.8安装mongodb3.0与备份脚本
  • C++传递不定参函数
  • Android笔记之网络状态推断
  • mysql 5.6.25编译安装详细步骤
  • 手写 jQuery 框架
  • P1120 小木棍 [数据加强版]
  • Oracle 11gR2 List-Range分区实验
  • python操作excel
  • 一行命令搞定node.js升级
  • 仿射梯度
  • Snapchat发布不到2个月的故事搜索功能,又双叒被Instagram抄袭了
  • 中芯国际第三财季净利润1.136亿美元
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【技术性】Search知识
  • 2017-08-04 前端日报
  • Asm.js的简单介绍
  • extjs4学习之配置
  • Laravel 实践之路: 数据库迁移与数据填充
  • Less 日常用法
  • MQ框架的比较
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redux系列x:源码分析
  • unity如何实现一个固定宽度的orthagraphic相机
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 多线程事务回滚
  • 分享几个不错的工具
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 力扣(LeetCode)22
  • 前端攻城师
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 三栏布局总结
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 透过事物看本质的能力怎么培养?
  • ###C语言程序设计-----C语言学习(6)#
  • %@ page import=%的用法
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十八)SpringBoot之发送QQ邮件
  • (转)Google的Objective-C编码规范
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • **python多态
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET MVC第三章、三种传值方式