layout | title | parent | nav_order |
---|---|---|---|
default |
WAMP |
Transports |
3 |
{% include support.md %}
A transport for Web Application Messaging Protocol. WAMP is an open standard WebSocket subprotocol. It uses internally Thruway PHP library thruway/client
- Installation
- Start the WAMP router
- Create context
- Consume message
- Subscription consumer
- Send message to topic
$ composer require enqueue/wamp
You can get a WAMP router with Thruway:
$ composer require voryx/thruway
$ php vendor/voryx/thruway/Examples/SimpleWsRouter.php
Thruway is now running on 127.0.0.1 port 9090
<?php
use Enqueue\Wamp\WampConnectionFactory;
$connectionFactory = new WampConnectionFactory();
// same as above
$connectionFactory = new WampConnectionFactory('wamp:');
$connectionFactory = new WampConnectionFactory('ws:');
$connectionFactory = new WampConnectionFactory('wamp://127.0.0.1:9090');
$context = $connectionFactory->createContext();
Start message consumer before send message to the topic
<?php
/** @var \Enqueue\Wamp\WampContext $context */
$fooTopic = $context->createTopic('foo');
$consumer = $context->createConsumer($fooQueue);
while (true) {
if ($message = $consumer->receive()) {
// process a message
}
}
<?php
use Interop\Queue\Message;
use Interop\Queue\Consumer;
/** @var \Enqueue\Wamp\WampContext $context */
/** @var \Enqueue\Wamp\WampDestination $fooQueue */
/** @var \Enqueue\Wamp\WampDestination $barQueue */
$fooConsumer = $context->createConsumer($fooQueue);
$barConsumer = $context->createConsumer($barQueue);
$subscriptionConsumer = $context->createSubscriptionConsumer();
$subscriptionConsumer->subscribe($fooConsumer, function(Message $message, Consumer $consumer) {
// process message
return true;
});
$subscriptionConsumer->subscribe($barConsumer, function(Message $message, Consumer $consumer) {
// process message
return true;
});
$subscriptionConsumer->consume(2000); // 2 sec
<?php
/** @var \Enqueue\Wamp\WampContext $context */
$fooTopic = $context->createTopic('foo');
$message = $context->createMessage('Hello world!');
$context->createProducer()->send($fooTopic, $message);