【问题标题】:Flask + Tornado application - how to communicate with server (Connection refused)Flask + Tornado 应用程序 - 如何与服务器通信(连接被拒绝)
【发布时间】:2018-02-13 15:30:15
【问题描述】:

我已按照在线文档安装GNU health FHIR REST server

我已经设法让 REST 服务器应用程序在我的服务器机器上运行。 According to the documentation,我的服务器应该可以使用以下端点:

List all patients (http://localhost:5000/Patient)
Show info for patient id #1 (http://localhost:5000/Patient/1)
List all patients with ana in name (http://localhost:5000/Patient?name=ana)

# etc ...

这是用于启动 Tornado 服务器的 Python 代码:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options
from app import create_app
from config import ProductionConfig

define("port", default=5000, help="Port to listen on", type=int)
#app = create_app(config=ProductionConfig)
app = create_app() #DebugConfig
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(options.port)
IOLoop.instance().start()

我使用curl尝试询问服务器:

curl http://localhost:5000/Patient
curl: (7) Failed to connect to localhost port 5000: Connection refused

注意:我猜测(根据上面粘贴的代码),Tornado 服务器正在侦听端口 5000。我修改了代码以打印出 `options.port 的值,但是由于某种原因,它不会打印到控制台;也未能将值记录到文件中(文件未写入,并且没有给出错误消息)-所以不确定发生了什么。

我仔细检查了lsof 以查看哪些端口是开放的:

$ lsof -i
COMMAND   PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python2 23147 morpheous    4u  IPv6 592698      0t0  TCP localhost:51950->localhost:8000 (ESTABLISHED)

我需要帮助确定 Tornado 正在运行哪个端口,因此我可以使用 curl 查询 REST API。

【问题讨论】:

  • 这段代码看起来是正确的,如果我替换我自己的create_app 函数,它就可以工作。问题一定出在appconfig 模块中。
  • @BenDarnell 您的 Tornado 实例在哪个端口上运行?另外,在我的问题中,我想知道如何使用 curl 与服务器交谈 - 我该怎么做?
  • 另外,您知道我如何调试龙卷风应用程序代码(我的问题中提供的代码)。无法打印到控制台或将变量记录到文件使调试和解决问题变得更加困难。
  • 我使用的是 5000 和相同的 curl 命令。在 Tornado 应用程序中打印到控制台正常工作,因此在进入网络问题之前,首先要弄清楚打印问题发生了什么。尝试在每一行添加打印以查看它停止的位置。
  • 创建服务器并只监听,listen 不是alive,任何套接字都可以在没有OK 信号的情况下运行?

标签: python flask tornado


【解决方案1】:

如果权限问题或该端口上没有任何运行,则会出现连接被拒绝。在你的情况下,我猜 5000 上没有运行任何东西。

请用这个命令检查

ss -ltp

您可能必须使用 sudo 列出所有带有端口和用户的 tcp 连接

(e.x) sudo ss -ltp

我的输出:

LISTEN 0 128 *:6379 : 用户:(("redis-server",pid=12325,fd=5))

注意:我只是在这里列出了我的列表中的一个输出。

这只是告诉我 redis 正在 6379 端口上运行。

如果龙卷风正在运行,它会在触发此命令时为您列出。

如果您在这方面遇到任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2018-01-25
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多