簡體   English   中英

Bref websocket 處理程序是否還活着?

[英]Are Bref websocket handlers kept alive?

sls 文檔

Websockets 使得添加對客戶端和服務器之間的雙向通信通道的支持成為可能。 連接通道保持活動狀態並重新用於來回交換消息。

那太棒了。

然而,查看 bref 文檔,這根本不明顯。 $connect處理程序是否有可能將數據寫入某處—— /tmpAPCu擴展等——以后的處理程序可以讀取這些數據? 如果沒有 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM