使用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脚本 打开浏览器控制台 观察效果

时间: 2024-10-10 16:43:44

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

SocketLog-微信调试、API调试和AJAX的调试的工具,能将日志通过WebSocket输出到Chrome浏览器的console中

说明 SocketLog适合Ajax调试和API调试, 举一个常见的场景,用SocketLog来做微信调试, 我们在做微信API开发的时候,如果API有bug,微信只提示"改公众账号暂时无法提供服务,请稍候再试" ,我们根本不知道API出来什么问题. 有了SocketLog就不一样了, 我们可以知道微信给API传递了哪些参数, 程序有错误我们也能看见错误信息(下方有张图片,可能加载慢,请耐心等待一下) 正在运行的API有bug,不能var_dump进行调试,因为会影响client的调用

php只能做网站?基于swoole+websocket开发双向通信应用

前言 众所周知,PHP用于开发基于HTTP协议的网站应用非常便捷.而HTTP协议是一种单向的通信协议,只能接收客户端的请求,然后响应请求,不能主动向客户端推送信息.因此,一些实时性要求比较高的应用,如实时聊天.直播应用.在线网页游戏等,就不适合采用HTTP协议.即使采用客户端主动轮询的方式来间接实现双向通信,也会较大地增加服务器的负担,增大代码的复杂性,不利于维护. 那么,是否PHP就无法用来开发双向通信的应用呢? 答案是否定的.PHP内置socket通信支持,可以与linux程序基于socke

idea的sbt下添加lib需要执行console命令

首先我们需要修改项目的build.sbt文件,添加需要的Scala版本和libraryDependencies,注意sbt文件每行之间必须有空行. 1 2 3 4 5 6 7 name := "sbtTest" version := "1.0″ scalaVersion := "2.10.4″ libraryDependencies += "org.mongodb" %% "casbah" % "2.7.2″ sbt

基于 WebSocket 的聊天和大文件上传(有进度提示)完美实现

大家好,好久没有写文章了,当然不是不想写,主要是工作太忙,公司有没有网络环境,不让上网,所以写的就少了.今天是2019年的最后一天,明天就要开始新的一年,当然也希望自己有一个新的开始.在2019年的最后一天,写点东西,作为这一年的总结吧!写点啥呢?最近有时间,由于公司的需要,需要实现一个自己的.Web版本的聊天工具,当然也要能传输文件.经过两个星期的无网络.艰苦的学习,终于写出了一个最初的版本.在公司里面里面已经生成正式版本了,很多类型都进行了抽象化,支持注册,头像,私信,群聊,传输大文件,类似

dup和fork函数执行后的文件情况

dup和fork函数执行后的文件情况 转自http://blog.csdn.net/shanshanpt/article/details/39049579 对于dup和fork函数来说,前者是复制一个文件描述符,后者是复制进程,同时相关的文件信息也会被复制. 一.对于Dup 之前已经知道,对于一个进程来说,有一个files_struct来管理所有的相关文件,最终的反应形式其实就是一个文件数组而已: 所谓文件描述符就是数组下标.Dup函数总是从数组第一个元素开始扫描,获取第一个可用的文件描述符(也

解决&#160;SqlServer执行脚本,文件过大,内存溢出问题

原文:解决 SqlServer执行脚本,文件过大,内存溢出问题 执行.sql脚本文件,如果文件较大时,执行会出现内存溢出问题,可用命令替代 cmd 中输入 osql -S 127.0.0.1,8433 -U sa -P sa -i d:\sql.sql ,-S 服务器名 -U 用户名 -P 密码 -i 文件地址,等待执行完毕即可 以上在sql2008R2下执行通过 如果数据库是 sql2008的 请将 osql 修改成为 sqlcmd 即可

java中如何生成可执行的jar文件

java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$myAct ionListener.class CardLayoutDemo.class myClosingListener.class myPanel.class jar命令为java自带的专用打包工具: c代表生成新的jar包: e代表可执行的类,亦即main方法所在的类.如果该类有所属的包,书

java程序执行SQL脚本文件

首先引入ibatis-common-2.jar包 import com.ibatis.common.jdbc.ScriptRunner; import com.ibatis.common.resources.Resources; jpetstore测试代码如下: package com.ibatis.jpetstore.test; import java.sql.DriverManager; import java.util.Properties; import com.ibatis.commo

Delphi 7 在程序中直接执行SQL脚本文件

Delphi 7 在程序中直接执行SQL脚本文件 在处理MSDE一些操作中.需要执行一些SQL脚本.有的是从SQLServer 2000中生成的SQL为后缀的脚本.在MSDE中没有企业管理器,操作都是在程序中完成的.所以用以下函数来执行SQL脚本. //执行一个SQL角本文件,文件只能是ANSI编码的.//如果文件是UNICODE编码的话,则会乱码.var  s:string;  sqltext : string;  sqlfile : TextFile;begin  if OpenDialog