【问题标题】:Communicate between a python server and node serverpython服务器和节点服务器之间的通信
【发布时间】:2024-07-06 16:55:02
【问题描述】:

我有一个应用程序使用需要相互通信的两台服务器。一个是实现 BaseHTTPRequestHandler 的 do_METHODs 的 python 服务器。另一个是 node js 的开发服务器/生产服务器,托管一个 React JS 应用程序。

node js 应用程序使用 POST 请求从输入中获取消息,python 服务器从该 POST 请求中提取该消息,然后使用 Boto3 调用 Amazon 的 Lex 以获取响应。

每当我运行 node js 开发服务器(在 localhost:3000 上)和 python 服务器(在 localhost:3001 上)时,python 服务器都能够识别已发出 POST 请求并继续并获得响应。但是,当我运行节点 js 生产服务器(在 localhost:5000 上)和 python 服务器(在 localhost:3001 上)时,节点 js 服务器无法与 python 服务器通信。这是为什么呢?

【问题讨论】:

  • 您收到错误消息了吗?始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图)(不是评论)。还有其他有用的信息。
  • 也许你在错误的地方更改了端口。更好地展示你的代码。

标签: python node.js reactjs


【解决方案1】:

如果您想在本地开发服务器和 Internet 上的任何其他服务器之间进行通信,您需要建立隧道连接。默认情况下,路由器配置为拒绝所有传入流量,因此当您的节点实例尝试与您的开发服务器通信时,它不会通过防火墙。

一个简单的解决方案是使用ngrok。安装完成后,打开一个新的终端窗口并运行:

 ngrok http <PORT>

&lt;PORT&gt; 是 3001,因为这是您的开发服务器正在侦听的端口。

此答案假设您实际上是在生产服务器上运行 node.js 实例,而不是在本地计算机上。如果不是这种情况,那么这可能无法解决您的问题。

【讨论】:

    【解决方案2】:

    经过大量研究,我觉得让两个本地应用程序在不同的端口上运行有点不切实际,或者说比应该的更复杂。

    因此,我已将我的项目迁移到使用 Django 而不是使用 React JS 并将其与 python 集成。这样,Django 的后端可以处理我发出的 POST 请求并根据需要更新 DOM。

    所有这些都是针对一个聊天机器人应用程序,它假设接受用户的问题,调用 Amazon 的 Lex 以获得意图和实体,然后 spaCy(一个 ML 框架)搜索我们的数据库以寻找答案。然后返回答案,然后在不刷新页面的情况下更新 DOM。

    【讨论】:

      最近更新 更多