定制 rob-lester-jr04/call-forwarding 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

rob-lester-jr04/call-forwarding

最新稳定版本:1.0.3

Composer 安装命令:

composer require rob-lester-jr04/call-forwarding

包简介

A methodology that will reduce database writes and improve inbound request handling

README 文档

README

Latest Version on Packagist PHP Composer Total Downloads

Our innovative "CallForwarding" package optimizes database performance during high-traffic scenarios by intelligently queuing up database writes on eloquent models. By consolidating these writes into a single operation, it alleviates strain on database resources, ensuring smooth operations even during peak times. With ForwardSync, your system gains efficiency and resilience, allowing you to focus on delivering exceptional user experiences without worrying about database constraints.

Table of Contents

Installation

Download to your project directory, add README.md, and commit:

composer require rob-lester-jr04/call-forwarding

Usage

For each model you want to implement call forwarding on, include both the trait and the interface.

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Lester\Forwarding\ReceivesCalls;
use Lester\Forwarding\ShouldForward;

class PageVisit extends Model implements ShouldForward
{
	
	use ReceivesCalls;
	
}

Then, to make an update or an insert, call callForwarding() before your persist method. Example:

$visit = new PageVisit;
$visit->hits = 15;

$visit-> forwarded()->save(); // This will return false. That is expected.

Now by default, every minute, anything that has been queued this way will get persisted.

Advanced Configuration

Changing the driver

The package is built in with 3 drivers for the queue. The default is file, but it also includes redis and memcached.

Your choices out of the box are File or Redis. To use the Redis option, add this to your .env file:

CF_DRIVER=redis

Write Callbacks

If you have code you'd like to execute after the write has occured, you can chain the afterForward method with a closure as the parameter. Example.

$model = new PageVisit;

$visit->afterForward(function($attrs) {
	// Do something else with the attributes.
})->forwarded()->save();

Publishing the config file.

php artisan vendor:publish --provider="Lester\Forwarding\CallForwardingServiceProvider"

Custom Driver

Too generate your own driver, create a class that implements the CallForwardingDriver interface with the following methods: putItem, getAllItems

Register the custom class in the config file under the handler array and use the slug you defined as the handler.

'handler' => 'my-custom-handler',

'handlers' => [
	// ...
	'my-custom-handler' => \App\My\Handler::class,
], 
<?php

namespace App\Handlers; // or whatever namespace you want to use

use Lester\Forwarding\Contracts\CallForwardingDriver;
use Illuminate\Support\Collection;

class MyHandler implements CallForwardingDriver
{
	// Worth noting, $key is only ever 'update' or 'insert'
	public function putItem($key, $data): void
	{
		// Store the db write.
	}
	
	public function getAllItems($key, $purge = false): Collection
	{
		// Retrieve the collection of stored db writes
		
		// Purge each item if the $purge flag is true.
	}
}

Support

Please open an issue for support.

Contributing

Please contribute using Github Flow. Create a branch, add commits, and open a pull request.

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-04-15

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固