PHPackages                             takuya/php-sysv-ipc-message-queue - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. takuya/php-sysv-ipc-message-queue

ActiveLibrary[Queues &amp; Workers](/categories/queues)

takuya/php-sysv-ipc-message-queue
=================================

0.1.2(1y ago)01.3k—0%1GPL-3.0-or-laterPHPCI passing

Since Feb 17Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/takuya/php-sysv-ipc-message-queue)[ Packagist](https://packagist.org/packages/takuya/php-sysv-ipc-message-queue)[ RSS](/packages/takuya-php-sysv-ipc-message-queue/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (4)Used By (1)

php-sysv-ipc-message-queue
==========================

[](#php-sysv-ipc-message-queue)

php sysv ipc message queue wrapper

IPC Message Queue for php
-------------------------

[](#ipc-message-queue-for-php)

SysV IPC Message queue is available as php function. This package is Object Class wrapping `msg_send`.

This repository wrap function and frequently appearing Usage.

Installing
----------

[](#installing)

from Packagist.

```
composer require takuya/php-sysv-ipc-message-queue
```

from GitHub.

```
name='php-sysv-ipc-message-queue'
composer config repositories.$name \
vcs https://github.com/takuya/$name
composer require takuya/$name:master
composer install
```

Examples.
---------

[](#examples)

- Initialize and push
- Dont forget remove Queue.
- Save and Load for system ShutDown.
- Multi process (inter process).

#### Initialize and push to Queue

[](#initialize-and-push-to-queue)

initialize and send data to queue.

```
$q = new IPCMsgQueue('my-named-queue');
$msg = 'random string';
$q->push($msg);
```

Since `msg_send` is supporting `serialize`. we can push everything.

```
$q = new IPCMsgQueue('my-named-queue');
// send array
$msg = ['a'=>1];
$q->push($msg);
// send object
$obj = new stdClass();
$obj->name = 'takuya';
$msg = $obj;
$q->push($msg);
```

We can get queue message as is sent.

```
$q = new IPCMsgQueue('my-named-queue');
$arr = ['a'=>1];
$q->push($msg=$arr);
// retrieve data as send.
$result = $q->pop();
// same to send
$arr == $result #=> true
```

Notice, by serialize() , message size increased.(over 1024, large bytes);

```
## large bytes
$msg = str_rand(1024);
$q = new IPCMsgQueue('my-named-queue');
$q->push($msg);
// will be not same to $msg.
$result = $q->pop();
// to get same data,specify large size.
$result = $q->pop(null,strlen(serialize($msg)));// will be 10 byte larger.
```

I wrote this class , suppose to be used simple message. large size (&gt;1024) is un-usual way.

Don't forget to remove queue never used.
----------------------------------------

[](#dont-forget-to-remove-queue-never-used)

use `destroy()` to remove queue.

```
require_once 'vendor/autoload.php';
use Takuya\PhpSysvMessageQueue\IPCMsgQueue;
$q = new IPCMsgQueue('my-named-queue');
$q->push('message');
$q->pop();
$q->destroy();
```

Or use `ipcs -q`, `ipcrm` command to remove unnecessary used queue.

```
ipcs -q | grep takuya
ipcrm --queue-key 0x1234567
## you can delete at once.
ipcs -q | grep takuya | grep -oE '0x[a-f0-9]+' | xargs -I@ ipcrm --queue-key @
```

Queue will be remains unless explicitly deleted.

save and load when OS shutdown.
-------------------------------

[](#save-and-load-when-os-shutdown)

SysV IPC Message will be lost after shutdown. to prevent lost , try save and load messages.

#### Before shutdown

[](#before-shutdown)

```
$q = new IPCMsgQueue('my-named-queue');
// push some messages
$q->push('msg');
$q->push('msg');
$q->push('msg');
// save before shutdown.
$q->save('path/to/permanent/file');
```

#### After restart

[](#after-restart)

```
$q = new IPCMsgQueue('my-named-queue');
// load after system restarted.
$q->load('path/to/permanent/file');
// can read data
$q->pop()#=>'msg';
$q->pop()#=>'msg';
$q->pop()#=>'msg';
```

Multi Process (IPC)
-------------------

[](#multi-process-ipc)

Multi process (inter process). same name same queue.

#### consumer.php (worker)

[](#consumerphp-worker)

```
