[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
<?php
require(‘vendor/autoload.php‘);

use WebSocket\Client;

if(2 != count($argv)){
    fwrite(
        STDERR,
        "调用格式错误!使用格式 ./xxx filename".PHP_EOL
    );
    return 1;
}

$file_name      = $argv[1];
define("MAX_SHOW", 8192);

$file_size      = 0;
$file_size_new  = 0;
$add_size       = 0;
$ignore_size    = 0;
$fp = fopen($file_name, "r");
$client = new Client("ws://10.xx.2.xx:9501/");
while(1){
    clearstatcache();
    $file_size_new  = filesize($file_name);
    $add_size       = $file_size_new - $file_size;
    if($add_size > 0){
        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(50000);
}

fclose($fp);

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

<?php
$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();

执行客户端

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

原文地址:https://www.cnblogs.com/taoshihan/p/12146540.html

时间: 2024-11-09 04:42:24

[PHP] php作为websocket的客户端实时读取推送日志文件的相关文章

开源实时消息推送系统 MPush

系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的可商用的开源push推送系统. 特性和优势 源码全部开放,包括server.android.ios .websocket等 代码质量高,全部模块化设计,真正的商用级产品,考虑到推送中遇到的大部分场景 安全性高,基于RSA精简的加密握手协议,简单,高效,安全 支持断线重连,及弱网下的快速重连,无网络下

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

用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化,如果没有来自客户端的请求,用户就不会看到这些变化. 这种模式是不适合某些应用场景的,比如在社交网络用户需要近乎实时地知道其他用户最新的信息.对于普通站点来说, 请求-响应模式可以满足绝大多数的功能需求,但总有某些功能我们希望能够为用户提供实时消息的体验. 为解决这个问题,有两种方案可以选择: 仍旧使

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

Spring之WebSocket网页聊天以及服务器推送 转自:http://www.xdemo.org/spring-websocket-comet/ /Springframework /Spring之WebSocket网页聊天以及服务器推送 1. WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 2. 轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端

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

因为做通信项目的时候,需要实时获取每个分机的当前状态,发现websocket还不错,知识对浏览器的要求比较高, 针对特定用户推送消息,网上有一些 public class GetHttpSessionConfigurator  extends ServerEndpointConfig.Configurator{ @Override public void modifyHandshake(ServerEndpointConfig config,HandshakeRequest request,Ha

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

本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何去推送复杂的数据,以及推送一个实时的图表数据,文本为我原创,转载请注明出处:Richard.Hu,先上一堆乱七八糟的说明先: SignalR的官方地址是: https://www.asp.net/signalr 网上给出例子是一个聊天的例子,官网地址是:https://docs.microsoft.

关于云开发新服务“实时数据推送”,你需要了解的全在这了!

"微信小程序工程师邓坤力带你了解如何利用千呼万唤始出来的云开发实时数据推送服务打造生动的小程序和小游戏!" 在数据库在小程序·云开发中的应用一文中,我们了解到实时数据推送作为云开发即将上线的一项新能力,主要指客户端使用官方SDK发起socket连接建立对一个集合的监听,目标集合中如果有符合过滤条件的数据发生变更,将会直接推送到建立监听的客户端. 简单来说,使用实时数据推送可以更有效率的拉取数据,帮你把你的应用变成实时有状态,场景会非常有用,比如可以用来做弹幕,做实时排名更新,做实时刷新

【WP 8.1开发】手机客户端应用接收推送通知

上一篇文章中,已经完成了用于发送通知的服务器端,接下来我们就用这个服务端来测试一下. 在开始测试之前,我们要做一个接收通知的WP应用. 1.启动VS Express for Windows,新建项目,在项目模板中选择“空白应用程序(Windows Phone)”. 2.既然要接收通知,肯定少不了Toast.磁贴这几样常用的通知的,故我们得先准备一些图片. 在“解决方案资源管理器”中,双击打开清单文件,切换到“可见资产”选项卡,这个“资产”指的不你的银行卡存款有多少,而是你的应用中的一些如图片.音

websocket+redis实现即时消息推送思路

消息实时推送场景: 1,第一阶段可以实现消息群发功能 场景:根据应用类型,服务端发送消息,客户端及时收取消息.如同qq有时会弹出新闻小窗 2,第二阶段可以根据办理业务,单点推送 场景:手机用户办理一笔业务时,及时推送反馈.办理情况,如同招商银行按时推送信用卡还款信息,催你还钱,该还多少钱. 3,可以将邮件,短信推送这些有共性的东西整合为一个整体 设计思路: 1.服务端发送消息(含标题,内容),标题按照一定规则存入redis,内容存入oracle(内容不多,访问量大,并发量高时内容存入redis也

WebSocket实现Java后台消息推送

1.什么是WebSocket WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. 2.实现原理 在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” .在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道.两者之间就直接可以数据互相传送. 3.优点 在以前的消息推送