![](/img/trans.png)
[英]Azure APIM throws error for WebSocket API due to Connection: Keep-Alive,Upgrade
[英]Are Bref websocket handlers kept alive?
Websockets 使得添加對客戶端和服務器之間的雙向通信通道的支持成為可能。 連接通道保持活動狀態並重新用於來回交換消息。
那太棒了。
然而,查看 bref 文檔,這根本不明顯。 $connect
處理程序是否有可能將數據寫入某處—— /tmp
、 APCu
擴展等——以后的處理程序可以讀取這些數據? 如果沒有 websocket,答案是否定的,因為這就是 AWS Lambda 的工作方式。
service: chromedriver
provider:
name: aws
ecr:
images:
chromedriver:
path: ./
functions:
chromedriver:
image:
name: chromedriver
events:
- websocket: $connect
- websocket: $disconnect
- websocket:
route: $default
routeResponseSelectionExpression: $default
您可以在https://bref.sh/docs/web-apps/docker.html 查看 Dockerfile的示例,我的與示例相同,只是它還添加了 Chrome 和 Chromedriver 。 這是處理程序 PHP:
<?php
use Bref\Context\Context;
use Bref\Event\ApiGateway\WebsocketEvent;
use Bref\Event\ApiGateway\WebsocketHandler;
use Bref\Event\Http\HttpResponse;
require __DIR__ . '/vendor/autoload.php';
class Handler extends WebsocketHandler {
public function handleWebsocket(WebsocketEvent $event, Context $context): HttpResponse {
switch ($event->getEventType()) {
case 'CONNECT':
file_put_contents('/tmp/log.txt', $event->getConnectionId());
break;
}
return new HttpResponse(@file_get_contents('/tmp/log.txt') ?: 'not found');
}
}
return new Handler();
測試這個:
wscat --connect wss://url.from.the.output.of.serverless.deploy/dev
Connected (press CTRL+C to quit)
> test
< fd4xBe7HIAMCK9A=
> test
< fd4xBe7HIAMCK9A=
兩次連接 ID 相同。 據我了解——這並不算太遠——這可能只是 Lambda 的“熱啟動”,但這足以滿足我的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.