php 实时显示日志 web,[PHP] php作为websocket的客户端实时读取推送日志文件

首先要使用composer来下载一个第三方扩展就可以实现php的websocket客户端,直接在当前目录生成下composer.json文件就可以了

composer require textalk/websocket

require('vendor/autoload.php');

use WebSocket\Client;

$client = new Client("ws://echo.websocket.org/");

$client->send("Hello WebSocket.org!");

echo $client->receive();

配合php的读取文件操作,只读取最新的追加的内容,下面代码为读取日志的客户端 , 发送给10.xx.2.xx:9501

#!/usr/bin/env php

require('vendor/autoload.php');

use WebSocket\Client;

if( != count($argv)){

fwrite(

STDERR,

"调用格式错误!使用格式 ./xxx filename".PHP_EOL

);

return ;

}

$file_name = $argv[];

define("MAX_SHOW", );

$file_size = ;

$file_size_new = ;

$add_size = ;

$ignore_size = ;

$fp = fopen($file_name, "r");

$client = new Client("ws://10.xx.2.xx:9501/");

while(){

clearstatcache();

$file_size_new = filesize($file_name);

$add_size = $file_size_new - $file_size;

if($add_size > ){

if($add_size > MAX_SHOW){

$ignore_size = $add_size - MAX_SHOW;

$add_size = MAX_SHOW;

fseek($fp, $file_size + $ignore_size);

}

//直接输出内容

// fwrite(

// STDOUT,

// fread($fp, $add_size)

// );

$client->send(fread($fp, $add_size));

$file_size = $file_size_new;

}

usleep();

}

fclose($fp);

服务端的代码使用swoole作为服务端,并且在收到消息后给所有的连接广播,执行服务端

$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);

$server->on('open', function (Swoole\WebSocket\Server $server, $request)use($fds) {

echo "server: handshake success with fd{$request->fd}\n";

});

$server->on('message', function (Swoole\WebSocket\Server $server, $frame)use($fds) {

echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";

foreach($server->connections as $fd){

$server->push($fd, $frame->data);

}

});

$server->on('close', function ($ser, $fd) {

echo "client {$fd} closed\n";

});

$server->start();

4662145af1de5de5c994b39294c5bd92.png

执行客户端

ff01abe3559e4d4141d0f097c3cfc446.png

可以在浏览器直接实时输出

6de47fc6342c0f0564bcb829d5fd1fbf.png

实时数据推送webSocket

实时数据推送 在Web或移动项目中,服务器向客户端实时推送消息是一种常见的业务需求. 实现方式 Polling:轮询(俗称“拉”),即定期重新请求数据. Long-Polling:长轮询,是 Poll ...

开源实时消息推送系统 MPush

系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

基于socket.io的实时消息推送

用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

【js学习】js连接RabbitMQ达到实时消息推送

js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...

未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在

C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...

Spring之WebSocket网页聊天以及服务器推送

Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring ...

WebSocket 的一些简单页面推送使用

因为做通信项目的时候,需要实时获取每个分机的当前状态,发现websocket还不错,只是对浏览器的要求比较高, 针对特定用户推送消息,网上有一些 public class GetHttpSession ...

Worktile中百万级实时消息推送服务的实现

Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

随机推荐

Multiple Contexts have a path of 错误

1.问题描述 在eclipse里面启动tomcat的时候,看到报错,multiple contexts have a path.tomcat启动失败 2.解决办法 删除tomcat,重新加载部署tom ...

JQuery------$.ajax()的使用方法

菜鸟教程地址: http://www.runoob.com/jquery/ajax-ajax.html html(../Home/Index.cshtml)

iOS图片加载新框架 - FlyImage

FlyImage 整合了SDWebImage,FastImageCache,AFNetworking的优点,是一个新的性能高效.接口简单的图片加载框架. 特点 高效 可将多张小图解码后存储到同一张大图 ...

jQuery笔记一

陆续更新中..... 1,创建标签的时候可以提前写好,以后用clone()方法克隆即可. 如: var div=$("

Oracle性能调优(AWR)

一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...

Qt仿Android带特效的数字时钟源码分析(滑动,翻页,旋转效果)

这个数字时钟的源码可以在Qt Demo中找到,风格是仿Android的,不过该Demo中含有三种动画效果(鉴于本人未曾用过Android的系统,因此不知道Android的数字时钟是否也含有这三种效果) ...

C语言第三次作业---单层循环结构

一.PTA实验作业 题目一.最佳情侣身高差 1.实验代码 int N;//存放输入的人数 char sex; double hight1,hight2;//分别存放输入的身高和输出的身高 scanf( ...

Aidl跨进程通信机制-android学习之旅(87)

Aidl简介 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信的代码. 如果在 ...

201671010147 2017年8月27号 初学java的感想

在IT行业中,java无疑是最热门的,很多企业也青睐java,因为他的扩展性好,可以处理更多客户的数据,正是因为java有前景所以才吸引更多人去学习.在大一我们已经接触vhleC语言,大二开始就解除了 ...

【51nod】1239 欧拉函数之和 杜教筛

[题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值