首頁 > 後端開發 > Python教學 > 如何在 Flask 中維護每個使用者會話的唯一 Rserve 連線?

如何在 Flask 中維護每個使用者會話的唯一 Rserve 連線?

Linda Hamilton
發布: 2024-12-15 16:46:15
原創
229 人瀏覽過

How to Maintain Unique Rserve Connections Per User Session in Flask?

在Flask 會話中維護唯一連接

問題:
在Flask 應用程式中,需要為每個使用者會話建立並維護與服務(在本例中為Rserve)的唯一連線。由於連線物件非 JSON 可序列化,在會話中儲存連線物件會失敗,而使用flask.g 並不能確保持久性。

解決方案:
為了解決這個問題,我們透過使用 multiprocessing.Manager 將 Rserve 連線的建立與使用者要求分開。此外部程序管理每個用戶的連線。代碼如下:

單獨的管理器進程(rserve_manager.py):

import atexit
from multiprocessing import Lock
from multiprocessing.managers import BaseManager
import pyRserve

connections = {}
lock = Lock()


def get_connection(user_id):
    with lock:
        if user_id not in connections:
            connections[user_id] = pyRserve.connect()

        return connections[user_id]


@atexit.register
def close_connections():
    for connection in connections.values():
        connection.close()


manager = BaseManager(('', 37844), b'password')
manager.register('get_connection', get_connection)
server = manager.get_server()
server.serve_forever()
登入後複製

從Flask 應用程序訪問管理器:

from multiprocessing.managers import BaseManager
from flask import g, session

def get_rserve():
    if not hasattr(g, 'rserve'):
        manager = BaseManager(('', 37844), b'password')
        manager.register('get_connection')
        manager.connect()
        g.rserve = manager.get_connection(session['user_id'])

    return g.rserve
登入後複製

在查看:

result = get_rserve().eval('3 + 5')
登入後複製

此方法為每個用戶提供唯一的連接,從而能夠在Flask 應用程式中維護特定於會話的資料或服務連線。

以上是如何在 Flask 中維護每個使用者會話的唯一 Rserve 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板