From 5ea41956fdaa13f3053bb1d7e14327c2f1bc7410 Mon Sep 17 00:00:00 2001 From: dqy <1016751306@qq.com> Date: Mon, 23 Oct 2023 16:41:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20get=5Fnode=5Fip=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client.ini | 2 +- src/client.py | 19 +++++++++++-------- src/server.py | 17 ++++++++--------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/client.ini b/src/client.ini index 04c5027..0725142 100644 --- a/src/client.ini +++ b/src/client.ini @@ -1,3 +1,3 @@ [settings] -server_address = "127.0.0.1:8000" +server_address = 10.20.127.226:8000 version = 1.0 diff --git a/src/client.py b/src/client.py index 6c05624..6ace678 100644 --- a/src/client.py +++ b/src/client.py @@ -25,7 +25,7 @@ def init(): init_db() pk, sk = GenerateKeyPair() init_config() - # get_node_list(6, server_address) # type: ignore + get_node_list(6, server_address) # type: ignore def init_db(): @@ -277,22 +277,25 @@ def get_own_ip() -> str: # get node list from central server def get_node_list(count: int, server_addr: str): - url = "http://" + server_addr + "/server/send_nodes_list" - payload = {"count": count} - response = requests.post(url, json=payload) + url = "http://" + server_addr + "/server/send_nodes_list?count=" + str(count) + # payload = {"count": count} + # response = requests.post(url, json=payload) + response = requests.get(url) # Checking the response if response.status_code == 200: print("Success get node list") node_ip = response.text + node_ip = eval(node_ip) + print(node_ip) # insert node ip to database with sqlite3.connect("client.db") as db: db.executemany( """ INSERT INTO node - nodeip - VALUE (?) + (nodeip) + VALUES (?) """, - node_ip, + [(ip,) for ip in node_ip], ) db.commit() print("Success add node ip") @@ -311,4 +314,4 @@ local_ip = get_own_ip() if __name__ == "__main__": import uvicorn # pylint: disable=e0401 - uvicorn.run("client:app", host="0.0.0.0", port=8003, reload="True") + uvicorn.run("client:app", host="0.0.0.0", port=8003, reload=True) diff --git a/src/server.py b/src/server.py index e6f8107..c4b8fa3 100644 --- a/src/server.py +++ b/src/server.py @@ -95,20 +95,20 @@ async def receive_heartbeat_internal(): while 1: timeout = 70 # 删除超时的节点 - cursor.execute("DELETE FROM nodes WHERE last_heartbeat < ?", (time.time() - timeout,)) - conn.commit() + # cursor.execute("DELETE FROM nodes WHERE last_heartbeat < ?", (time.time() - timeout,)) + # conn.commit() await asyncio.sleep(timeout) @app.get("/server/send_nodes_list") -async def send_nodes_list(count: int) -> JSONResponse: +async def send_nodes_list(count: int) -> list: ''' - 中心服务器与客户端交互, 客户端发送所需节点个数, 中心服务器从数据库中顺序取出节点封装成json格式返回给客户端 + 中心服务器与客户端交互, 客户端发送所需节点个数, 中心服务器从数据库中顺序取出节点封装成list格式返回给客户端 params: count: 所需节点个数 return: - JSONResponse: {id: ip,...} + nodes_list: list ''' - nodes_list = {} + nodes_list = [] # 查询数据库中的节点数据 cursor.execute("SELECT * FROM nodes LIMIT ?", (count,)) @@ -116,10 +116,9 @@ async def send_nodes_list(count: int) -> JSONResponse: for row in rows: id, ip, last_heartbeat = row - nodes_list[id] = ip + nodes_list.append(ip) - json_result = jsonable_encoder(nodes_list) - return JSONResponse(content=json_result) + return nodes_list @app.get("/server/clear_database") async def clear_database() -> None: