Может ли кто-нибудь помочь мне с рабочим примером подписки graphql с php5 и AWS Appsync или клиентом php5 WebSocket, который работает с Appsync? Я пытаюсь textalk, но безуспешно.
<?php
require(dirname(dirname(__FILE__)) . '/graphql/vendor/autoload.php');
use WebSocket\Client;
$query = <<<'GRAPHQL'
subscription onCreateProfile{
onCreateBatch {
hotelId
batchId
profiles {
id
}
}
}
GRAPHQL;
$appSyncURL = 'wss://pbnblnr7xxxxxxxxxxxx.appsync-realtime-api.ap-south-1.amazonaws.com/graphql';
$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'verify_peer', false);
stream_context_set_option($context, 'ssl', 'verify_peer_name', false);
$client = new WebSocket\Client($appSyncURL, [
'timeout' => 60, // 1 minute time out
'context' => $context,
'headers' => [
'x-api-key' => 'APIKEY',
],
]);
$client->send($query);
echo $client->receive();
$client->close();
Запуск приведенного выше фрагмента дает ошибку ниже:
$ php subscription.php
{"payload":{"errors":[{"message":"NoProtocolError","errorCode":400}]},"type":"connection_error"}PHP Fatal error: Uncaught WebSocket\ConnectionException: Empty read; connection dead? Stream state: {"crypto":{"protocol":"UNKNOWN","cipher_name":"TLS_AES_256_GCM_SHA384","cipher_bits":256,"cipher_version":"TLSv1.3"},"timed_out":false,"blocked":true,"eof":true,"stream_type":"tcp_socket\/ssl","mode":"r+","unread_bytes":0,"seekable":false} in /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php:316
Stack trace:
#0 /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php(299): WebSocket\Base->throwException('Empty read; con...')
#1 /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php(159): WebSocket\Base->read(2)
#2 /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php(149): WebSocket\Base->receiveFragment()
#3 /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php(272): WebSocket\Base->receive()
#4 /var/www/html/demo/graphql/subscription.php(31): WebSocket\Base->close()
#5 {main}
thrown in /var/www/html/demo/graphql/vendor/textalk/websocket/lib/Base.php on line 316
Так кто-нибудь пробовал подписку на graphQL с php5? Мое требование - использовать подписку Graphql в приложении PHP (в бэкэнде). Я знаю, что подписка на graphQL будет нормально работать в интерфейсе через клиент javascript WebSocket. Но я должен использовать подписки на graphql в приложении PHP5.
Любая помощь будет оценена по достоинству!