php实时读取日志,php作为websocket的客户端实时读取推送日志文件

d278e5b27fffba32a2e1ccce7d69c6af.png

首先要使用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(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作为服务端,并且在收到消息后给所有的连接广播,执行服务端

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

b537922bdda07bb29a3769f6011b52f6.png

执行客户端

aafe8fb2a1575528f765ded915645765.png

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

9c8c65c91e49c514e81c27a9674cabd6.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值