LoginSignup
0
0

More than 1 year has passed since last update.

requests.Sessionの確認

Last updated at Posted at 2022-09-20

目的

requests.Sessionを利用した際に、TCPコネクションを使い回せていることを確認します。

構成

FastAPIサーバを2つ立てます。クライアントにはcurlコマンドを利用します。

  • server1.py
    • クライアントに叩かれるサーバ
    • server2.pyを叩くサーバ
  • server2.py
    • server1に叩かれるサーバ

ソースコード

server1.py

from typing import Union

from fastapi import FastAPI

app = FastAPI()
s = requests.Session()    


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

@app.get("/connect_backend_server")
def connect_backend_server():
    return s.get('http://localhost:8001').json()

server2.py

from typing import Union

from fastapi import FastAPI
import requests

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

サーバ起動

$ uvicorn server1:app --reload --port=8000
$ uvicorn server2:app --reload --port=8001

実験

5秒(uvicornのkeep-alive timeoutのデフォルト値)以内に2回リクエストを送ります。

$ curl http://127.0.0.1:8000/connect_backend_server
{"Hello":"World"}
$ curl http://127.0.0.1:8000/connect_backend_server
{"Hello":"World"}

server2.pyのログ

INFO:     127.0.0.1:62090 - "GET / HTTP/1.1" 200 OK
INFO:     127.0.0.1:62090 - "GET / HTTP/1.1" 200 OK

どちらも同じportで通信している(TCPコネクションを使い回せている)ことがわかります。もう少しわかりやすい確認方法があればコメントいただけますと幸いです。(パケットキャプチャは少し面倒なのでPython側で確認できる手段があると嬉しいのですが・・)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0