1. Go to this page and download the library: Download goalgorilla/graphql-php-ws library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
goalgorilla / graphql-php-ws example snippets
use GraphQL\Language\AST\OperationDefinitionNode;
use GraphQLWs\GraphQLWsSubscriberInterface;
use GraphQLWs\GraphQLWsSubscriptionServer;
use Ratchet\Http\HttpServer;
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsConnection;
use Ratchet\WebSocket\WsServer;
use React\EventLoop\Factory;
use React\Socket\Server as Reactor;
use Symfony\Component\HttpKernel\Log\Logger;
class RedisEventQueue implements GraphQLWsSubscriberInterface {
/**
* The subscriptions listening to our GraphQL
*/
protected array $subscriptions = [];
/**
* Called with new subscribers.
*
* {@inheritdoc}
*/
public function onSubscribe(string $subscription_id, WsConnection $client, OperationDefinitionNode $query, ?string $operationName = NULL, ?array $variables = NULL) : void{
$this->subscriptions[$subscription_id] = [
'client' => $client,
'query' => $query,
'operationName' => $operationName,
'variables' => $variables,
];
}
/**
* Called when connections are closed.
*
* {@inheritdoc}
*/
public function onComplete(string $subscription_id) : void{
unset($this->subscriptions[$subscription_id]);
}
/**
* Example function receiving data from an event system (e.g. a Redis queue).
*/
public function onData($data) {
// For this example we simply naïvely write the data to the client. This is
// most certainly a GraphQL error. This is where you'd actually resolve the
// queries your subscribers are subscribed to with the new data. This can be
// made easier by doing some double bookkeeping in the onSubscribe event
// handler but that's out of the scope of this example.
foreach ($this->subscriptions as $subscription) {
$subscription['client']->send(json_encode($data));
}
}
}
$ws_address = "localhost:8000";
$logger = new Logger();
$event_loop = Factory::create();
// Something that receives new data from an external system and keeps track of
// subscriptions. Any new data is sent to the subscriptions that have asked for
// the data.
$subscription_handler = new RedisEventQueue($event_loop);
// Set up the Websocket server. It
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.