You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
echo "Sending text to msg queue.\n";
 | 
						|
 | 
						|
class SwooleTask
 | 
						|
{
 | 
						|
    protected $queueId;
 | 
						|
    protected $workerId;
 | 
						|
    protected $taskId = 0;
 | 
						|
 | 
						|
    function __construct($key, $workerId = 0)
 | 
						|
    {
 | 
						|
        $this->queueId = msg_get_queue($key);
 | 
						|
        if ($this->queueId === false)
 | 
						|
        {
 | 
						|
            throw new \Swoole\Exception("msg_get_queue() failed.");
 | 
						|
        }
 | 
						|
        $this->workerId = $workerId;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function pack($data)
 | 
						|
    {
 | 
						|
        $fromFd = 0;
 | 
						|
        $type = 7;
 | 
						|
        if (!is_string($data))
 | 
						|
        {
 | 
						|
            $data = serialize($data);
 | 
						|
            $fromFd |= 2;
 | 
						|
        }
 | 
						|
        if (strlen($data) >= 8180)
 | 
						|
        {
 | 
						|
            $tmpFile = tempnam('/tmp/', 'swoole.task');
 | 
						|
            file_put_contents($tmpFile, $data);
 | 
						|
            $data = pack('l', strlen($data)) . $tmpFile . "\0";
 | 
						|
            $fromFd |= 1;
 | 
						|
            $len = 128 + 24;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            $len = strlen($data);
 | 
						|
        }
 | 
						|
        //typedef struct _swDataHead
 | 
						|
        //{
 | 
						|
        //    int fd;
 | 
						|
        //    uint16_t len;
 | 
						|
        //    int16_t from_id;
 | 
						|
        //    uint8_t type;
 | 
						|
        //    uint8_t flags;
 | 
						|
        //    uint16_t from_fd;
 | 
						|
        //} swDataHead;
 | 
						|
        return pack('lSsCCS', $this->taskId++, $len, $this->workerId, $type, 0, $fromFd) . $data;
 | 
						|
    }
 | 
						|
 | 
						|
    function dispatch($data)
 | 
						|
    {
 | 
						|
        if (!msg_send($this->queueId, $this->workerId + 1, $this->pack($data), false))
 | 
						|
        {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$task = new SwooleTask(0x70001001);
 | 
						|
//普通字符串
 | 
						|
$task->dispatch("Hello from PHP!");
 | 
						|
//数组
 | 
						|
$task->dispatch(array('data' => str_repeat('A', 1024), 'type' => 1));
 | 
						|
//大包
 | 
						|
$task->dispatch(array('data' => str_repeat('B', 1024 * 32), 'type' => 2)); |