Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使AWS Lambda与Neptune在websockets上可靠工作?_Amazon Web Services_Websocket_Aws Lambda_Gremlin Server_Amazon Neptune - Fatal编程技术网

Amazon web services 如何使AWS Lambda与Neptune在websockets上可靠工作?

Amazon web services 如何使AWS Lambda与Neptune在websockets上可靠工作?,amazon-web-services,websocket,aws-lambda,gremlin-server,amazon-neptune,Amazon Web Services,Websocket,Aws Lambda,Gremlin Server,Amazon Neptune,所以我构建了这个API。它包含一个Lambda函数(可通过API网关访问),该函数通过WebSocket与Neptune graph数据库实例进行对话 一切都已接通电源并正常工作。但我最近开始注意到API中出现了间歇性的500。经过一些调查,我发现每当多个请求接近时,Neptune Gremlin服务器就会断开/拒绝连接 我发现,这表明无服务器的短暂特性对websocket不起作用,因此每次请求后都应该手动关闭websocket连接。但在实施之后,我发现没有什么不同——仍然是500年 该页面还建

所以我构建了这个API。它包含一个Lambda函数(可通过API网关访问),该函数通过WebSocket与Neptune graph数据库实例进行对话

一切都已接通电源并正常工作。但我最近开始注意到API中出现了间歇性的500。经过一些调查,我发现每当多个请求接近时,Neptune Gremlin服务器就会断开/拒绝连接

我发现,这表明无服务器的短暂特性对websocket不起作用,因此每次请求后都应该手动关闭websocket连接。但在实施之后,我发现没有什么不同——仍然是500年

该页面还建议,在Neptune上使用Gremlin时,您可能应该向Neptune发送HTTP请求,而不是使用WebSocket

可选地,如果您使用GRMLIN,考虑向GRMLIN HTTP REST端点提交请求,而不是WebSoCube端点,从而避免需要创建和管理连接池的生存期。 这种方法的缺点是,我们将不得不使用基于字符串的查询(这意味着重新编写项目的很大一部分)。另一个缺点是gremlinhttp端点返回非常非结构化的数据

所以我想知道的是,是否有人能让兰博达通过websockets可靠地与海王星对话?如果是,怎么做

编辑:

因为我使用的是AWS Chalice框架,所以我不认为我真的可以直接访问处理函数。下面是我的lambda的样子

下面是
connect()
调用的代码:

导入操作系统
从gremlin_python.structure.graph导入图形
从gremlin_python.driver.driver_remote_连接导入DriverRemoteConnection
def connect():
conn\u string=os.environ.get('GRAPH\u DB')
全球g
g=Graph().traversal().withRemote(DriverRemoteConnection(连接字符串'g'))

因此,当应用程序启动时(当一个lambda实例启动时),该connect函数被调用,应用程序将连接到Neptune。从那里,应用程序传递全局
g
变量,以便为该调用使用相同的连接实例。然后在返回请求结果之前,我在
DriverRemoteConnection
对象上调用了
close()

是的,可以在Lambda函数中使用WebSocket与Neptune通信。根据您使用的编程语言,执行此操作有不同的细微差别。最后,在Lambda函数的handler()中实例化客户端连接并关闭连接

如果使用Java[1],则可以在处理程序外部创建集群对象,以便每次Lambda调用都可以重用它。但是在每次调用期间,必须实例化并关闭从该集群对象配置的客户机

您是否有正在使用的代码片段可以共享以供审阅


[1]

谢谢您的回复。由于我使用的是Chalice框架,所以我实际上无法直接访问处理程序函数,因此情况可能会变得复杂。不过我会用一些额外的信息来编辑这篇文章。总的来说,你需要确保每次调用Lambda函数时,都会建立一个新的连接,然后关闭。从Chalice的角度来看,这意味着每次对Chalice Lambda中的路由进行API调用时。因此,您不需要在顶层执行connect(),而是希望在每个路由中调用它,并在每个路由/API调用结束时关闭连接。好的,太好了,我将尝试这个!这个解决方案似乎奏效了!非常感谢泰勒!