websocket 将图像从AWS lambda发送到本地计算机时出现GoneException

pzfprimi  于 2023-06-23  发布在  Go
关注(0)|答案(1)|浏览(150)

我正在使用WebSocket通过API网关发送JPG图像。因为我需要在另一台机器上的真实的图像。
我按照这篇关于WebSocket API设置的文章,添加了一个单独的路由sendMessage,它调用Lambda函数
Setup a basic WebSocket mock in AWS ApiGateway
这是在Lambda上运行的代码示例

import base64
import boto3

api_client = boto3.client('apigatewaymanagementapi',endpoint_url='https://../test')
while not loaded:
    with open("/tmp/image.jpg", "rb") as image:
        b64string = base64.b64encode(image.read())
        firstpart, secondpart = b64string[:len(b64string)//2], b64string[len(b64string)//2:]
        api_client.post_to_connection(ConnectionId=connectionId, Data=firstpart)
        api_client.post_to_connection(ConnectionId=connectionId, Data=secondpart)
api_client.post_to_connection(ConnectionId=connectionId, Data="connected successfully!")

这个在机器上

from websockets.sync.client import connect
import base64
from PIL import Image

with connect("wss...") as websocket:
    websocket.send(json.dumps({"action":"sendMessage","message":"scanning"}))
    while (b64image_string_1:=websocket.recv()) != "connected successfully!":
        b64image_string_2 =websocket.recv()
        b64image_string = b64image_string_1 + b64image_string_2

        f = io.BytesIO(base64.b64decode(b64image_string))
        img = Image.open(f)

虽然图像最初会被发送过来,但在它运行几秒钟后我会得到一个错误。
botocore.errorfactory.GoneException: An error occurred (GoneException) when calling the PostToConnection operation:
我猜我的WebSocket设置可能是导致错误的原因,但我不确定如何修复它。

tct7dpnv

tct7dpnv1#

我得到的错误实际上是来自机器本身,不知何故,字符串的顺序被来自Web Socket的其他偶尔的警告/错误消息打断,导致接收到的字符串顺序错误。机器中的最后一行是导致错误并停止Web Socket连接的那一行。

img = Image.open(f)

Image.open()无法从错误连接的字符串加载,导致错误。在添加对接收字符串顺序的检查后,错误消失了。如果你得到一个GoneException,检查你的代码是否有可能中断和断开Web Socket连接的错误。我不知道这篇文章是否有用,但我会离开它

相关问题