백엔드 개발 PHP 튜토리얼 PHP는 SWOOLE 확장을 사용하여 타이밍 동기화를 구현합니다.

PHP는 SWOOLE 확장을 사용하여 타이밍 동기화를 구현합니다.

Jun 07, 2018 pm 05:30 PM
php swoole 예약된 작업 시간제 노동자

이 기사에서는 PHP SWOOLE을 사용하여 비동기 예약 작업 시스템을 만드는 방법을 소개합니다. 구체적으로 어떻게 구현하는지 자세히 살펴보겠습니다.

Nanning 회사 및 여러 지점에서 호출 시스템이 사용되었습니다. 과거에는 통화 데이터 분석이 필요합니다. 지점의 통화 서버가 인트라넷에 있기 때문에 기술적 수단을 통해 매핑됩니다. 지점과 난닝 간의 네트워크가 불안정하므로 분석이 필요합니다. 지점의 통화 데이터는 난닝에 동기화됩니다.

가장 간단한 방법은 MySQL의 마스터-슬레이브 동기화를 직접 구성하여 난닝에 데이터를 동기화하는 것입니다. 하지만 영업 전화 시스템의 회사는 우리에게 MySQL 권한을 부여하지 않습니다. 따라서 이 방법은 포기할 수 밖에 없습니다.

그래서 우리는 단순히 PHP를 사용하여 간단한 PHP 타이밍 동기화 도구를 구현하면 PHP 프로세스가 백그라운드에서 영구적으로 실행될 것이라고 생각하여 먼저 PHP 구성 요소인 SWOOLE에 도달했습니다. 하루 최대 데이터량이 5,000개 내외이므로 이 솔루션도 가능하니 그냥 해보세요.

우리는 PHP SWOOLE을 사용하여 비동기 예약 작업 시스템을 만듭니다.

MySQL 데이터베이스 자체의 마스터-슬레이브 동기화는 마스터 데이터베이스의 바이너리 로그를 구문 분석하여 슬레이브 데이터베이스에 데이터를 동기화합니다. 그러나 PHP를 사용하여 데이터를 동기화하는 경우 마스터 라이브러리에서 일괄적으로 데이터를 쿼리한 다음 난닝의 슬레이브 라이브러리에 삽입할 수만 있습니다.

여기에서 사용하는 프레임워크는 ThinkPHP 3.2입니다. ThinkPHP 3.2 .

首先安装PHP扩展: SWOOLE,因为没有使用到特别的功能,所以这里我们使用pecl来快速安装:

pecl install swoole
로그인 후 복사

安装完成后在 php.ini 里面加入 extension="swoole.so" 安装完成后,我们使用 phpinfo()

먼저 PHP 확장 프로그램인 SWOOLE를 설치합니다. 특별한 기능이 사용되지 않으므로 여기서는 빠른 설치를 위해 pecl을 사용합니다.

public function index()
{
 $serv = new \swoole_server("0.0.0.0", 9501);
 $serv->set([
  'worker_num' => 1,//一般设置为服务器CPU数的1-4倍
  'task_worker_num' => 8,//task进程的数量
  'daemonize' => 1,//以守护进程执行
  'max_request' => 10000,//最大请求数量
  "task_ipc_mode " => 2 //使用消息队列通信,并设置为争抢模式
 ]);
 $serv->on('Receive', [$this, 'onReceive']);//接收任务,并投递
 $serv->on('Task', [$this, 'onTask']);//可以在这个方法里面处理任务
 $serv->on('Finish', [$this, 'onFinish']);//任务完成时候调用
 $serv->start();
}
로그인 후 복사
설치 후 php.iniextension="swoole.so"를 추가합니다. 설치가 완료된 후 phpinfo()를 사용하여 여부를 확인합니다. 성공했습니다.

설치가 성공적으로 완료되면 글쓰기를 시작해 보겠습니다.

Server

1 먼저 백그라운드 서버를 시작하고 포트 9501

public function onReceive($serv, $fd, $from_id, $data)
{
 //使用json_decode 解析任务数据
 $areas = json_decode($data,true);
 foreach ($areas as $area){
  //投递异步任务
  $serv->task($area);
 }
}
로그인 후 복사

2를 수신합니다.

3. 작업 실행, 데이터를 쿼리하여 마스터 라이브러리에서 슬레이브 데이터베이스로 기록

public function onTask($serv, $task_id, $from_id, $task_data)
{
 $area = $task_data;//参数是地区编号
 $rows = 50; //每页多少条
 //主库地址,根据参数地区($area)编号切换master数据库连接
 //从库MySQL实例,根据参数地区($area)编号切换slave数据库连接
 //由于程序是常驻内存的,所以MySQL连接可以使用长连接,然后重复利用。要使用设计模式的,可以使用对象池模式
 Code......

 //master 库为分公司的数据库,slave库为数据同步到南宁后的从库
 Code......

 //使用$sql获取从库中最大的自增: SELECT MAX(id) AS maxid FROM ss_cdr_cdr_info limit 1
 $slaveMaxIncrementId = ...;

 //使用$sql获取主库中最大的自增: SELECT MAX(id) AS maxid FROM ss_cdr_cdr_info limit 1
 $masterMaxIncrementId = ...;

 //如果相等的就不同步了
 if($slaveMaxIncrementId >= $masterMaxIncrementId){
  return false;
 }

 //根据条数计算页数
 $dataNumber = ceil($masterMaxIncrementId - $slaveMaxIncrementId);
 $eachNumber = ceil($dataNumber / $rows);
 $left = 0;

 //根据页数来进行分批循环进行写入,要记得及时清理内存
 for ($i = 0; $i < $eachNumber; $i++) {
  $left = $i == 0 ? $slaveMaxIncrementId : $left + $rows;
  $right = $left + $rows;
  //生成分批查询条件
  //$where = "id > $left AND <= $right";
  $masterData = ...;//从主库查询数据
  $slaveLastInsertId = ...;//插入到从库
  unset($masterData,$slaveLastInsertId);
 }

 echo "New AsyncTask[id=$task_id]".PHP_EOL;
 $serv->finish("$area -> OK");
}
로그인 후 복사

4. 작업이 완료되면

public function onFinish($serv, $task_id, $task_data)
{
 echo "AsyncTask[$task_id] Finish: $task_data".PHP_EOL;
}
로그인 후 복사

클라이언트 푸시 작업

을 호출합니다. 기본적으로 완료되었으며 남은 것은 클라이언트 작업 push

public function index()
{
 $client = new \swoole_client(SWOOLE_SOCK_TCP);
 if (!$client->connect(&#39;127.0.0.1&#39;, 9501, 1)) {
  throw new Exception(&#39;链接SWOOLE服务错误&#39;);
 }
 $areas = json_encode([&#39;liuzhou&#39;,&#39;yulin&#39;,&#39;beihai&#39;,&#39;guilin&#39;]);
 //开始遍历检查
 $client->send($areas);
 echo "任务发送成功".PHP_EOL;
}
로그인 후 복사

이제 기본적으로 완료되었습니다. 나머지는 예약된 실행을 위한 쉘 스크립트를 작성하는 것입니다: /home/wwwroot/sync_db/crontab/send.sh

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

# 定时推送异步的数据同步任务
/usr/bin/php /home/wwwroot/sync_db/server.php home/index/index
로그인 후 복사

crontab 예약 작업을 사용하여 추가합니다. 예약된 작업에 스크립트

#设置每天12:30执行数据同步任务
30 12 * * * root /home/wwwroot/sync_db/crontab/send.sh
#设置每天19:00执行数据同步任务
0 19 * * * root /home/wwwroot/sync_db/crontab/send.sh
로그인 후 복사

팁: 최고 작업 푸시 및 실행이 성공했는지 알 수 있도록 로그 쓰기 작업을 추가하는 것이 좋습니다.

기본적으로 프로그램이 완성되었습니다. 더 좋은 방법이 있으면 언제든지 제안해 주세요.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

PHP는 두 배열의 서로 다른 요소를 쿼리하는 방법을 구현합니다.

php는 mysql 연결 풀의 효과를 구현합니다.

🎜🎜

위 내용은 PHP는 SWOOLE 확장을 사용하여 타이밍 동기화를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

See all articles