Skip to content

Commit

Permalink
up fix
Browse files Browse the repository at this point in the history
  • Loading branch information
kiss291323003 committed May 27, 2019
1 parent a033b75 commit 93e6e12
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 52 deletions.
7 changes: 5 additions & 2 deletions src/Render.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

use EasySwoole\Component\Process\AbstractProcess;
use EasySwoole\Component\Singleton;
use Swoole\Process;

class Render
{
Expand Down Expand Up @@ -69,7 +68,11 @@ protected function generateProcessList():array
{
$array = [];
for ($i = 1;$i <= $this->config->getWorkerNum();$i++){
$array[$i] = new RenderProcess("Render.{$this->config->getSocketPrefix()}Worker.{$i}",$this->config,false,2,true);
$config = new RenderProcessConfig();
$config->setProcessName('"Render.{$this->config->getSocketPrefix()}Worker.{$i}"');
$config->setSocketFile($this->config->getTempDir()."/Render.{$this->config->getSocketPrefix()}Worker.{$i}.sock");
$config->setRender($this->config->getRender());
$array[$i] = new RenderProcess($config);
$this->worker[$i] = $array[$i];
}
return $array;
Expand Down
80 changes: 30 additions & 50 deletions src/RenderProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,70 +4,50 @@
namespace EasySwoole\Template;


use EasySwoole\Component\Process\AbstractProcess;
use EasySwoole\Component\Process\Socket\AbstractUnixProcess;
use Swoole\Coroutine\Socket;
use Swoole\Process;

class RenderProcess extends AbstractProcess
class RenderProcess extends AbstractUnixProcess
{
public function run($arg)
function onAccept(Socket $socket)
{
/** @var Config $arg */
$sockFile = $arg->getTempDir()."/{$this->getProcessName()}.sock";
if (file_exists($sockFile))
{
unlink($sockFile);
}
$socketServer = new Socket(AF_UNIX,SOCK_STREAM,0);
$socketServer->bind($sockFile);
if(!$socketServer->listen(2048)){
trigger_error('listen '.$sockFile. ' fail');
/** @var RenderInterface $render */
$render = $this->getConfig()->getRender();
$header = $socket->recvAll(4,1);
if(strlen($header) != 4){
$socket->close();
return;
}
while (1){
$conn = $socketServer->accept(-1);
if($conn){
$header = $conn->recvAll(4,1);
if(strlen($header) != 4){
$conn->close();
return;
}
$allLength = Protocol::packDataLength($header);
$data = $conn->recvAll($allLength,1);
if(strlen($data) == $allLength){
$data = unserialize($data);
try{
$reply = $arg->getRender()->render($data['template'],$data['data'],$data['options']);
}catch (\Throwable $throwable){
$reply = $arg->getRender()->onException($throwable);
}finally{
$arg->getRender()->afterRender($reply,$data['template'],$data['data'],$data['options']);
}
$conn->sendAll(Protocol::pack(serialize($reply)));
$conn->close();
}else{
$conn->close();
return;
}
}else{
\co::sleep(0.001);
$allLength = Protocol::packDataLength($header);
$data = $socket->recvAll($allLength,1);
if(strlen($data) == $allLength){
$data = unserialize($data);
try{
$reply = $render->render($data['template'],$data['data'],$data['options']);
}catch (\Throwable $throwable){
$reply = $render->onException($throwable);
}finally{
$render->afterRender($reply,$data['template'],$data['data'],$data['options']);
}
$socket->sendAll(Protocol::pack(serialize($reply)));
$socket->close();
}else{
$socket->close();
return;
}
}

public function onShutDown()
protected function onException(\Throwable $throwable,...$arg)
{
// TODO: Implement onShutDown() method.
trigger_error("{$throwable->getMessage()} at file:{$throwable->getFile()} line:{$throwable->getLine()}");
}

public function onReceive(string $str)
protected function onPipeReadable(Process $process)
{
if($str == 'shutdown'){
$this->getProcess()->exit(0);
$msg = $process->read();
if($msg == 'shutdown'){
$process->exit(0);
}
}

public function onException(\Throwable $throwable)
{
trigger_error("{$throwable->getMessage()} at file:{$throwable->getFile()} line:{$throwable->getLine()}");
}
}
22 changes: 22 additions & 0 deletions src/RenderProcessConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php


namespace EasySwoole\Template;


use EasySwoole\Component\Process\Socket\UnixProcessConfig;

class RenderProcessConfig extends UnixProcessConfig
{
protected $render;

public function getRender():RenderInterface
{
return $this->render;
}

public function setRender(RenderInterface $render): void
{
$this->render = $render;
}
}

0 comments on commit 93e6e12

Please sign in to comment.