Heim > Backend-Entwicklung > Python-Tutorial > Wie pflege ich eindeutige Rserve-Verbindungen pro Benutzersitzung in Flask?

Wie pflege ich eindeutige Rserve-Verbindungen pro Benutzersitzung in Flask?

Linda Hamilton
Freigeben: 2024-12-15 16:46:15
Original
229 Leute haben es durchsucht

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

Aufrechterhaltung einzigartiger Verbindungen in Flask-Sitzungen

Problem:
In einer Flask-Anwendung besteht die Notwendigkeit, Erstellen und pflegen Sie für jede Benutzersitzung eindeutige Verbindungen zu einem Dienst (in diesem Fall Rserve). Das Speichern des Verbindungsobjekts in der Sitzung schlägt aufgrund seiner Nicht-JSON-Serialisierbarkeit fehl, während die Verwendung von flask.g keine Persistenz gewährleistet.

Lösung:
Um dieses Problem zu lösen, haben wir Trennen Sie die Erstellung von Rserve-Verbindungen von den Benutzeranforderungen, indem Sie einen Multiprocessing-Manager verwenden. Dieser externe Prozess verwaltet die Verbindungen für jeden Benutzer. Hier ist der Code:

Separater Manager-Prozess (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()
Nach dem Login kopieren

Zugriff auf den Manager über die Flask-Anwendung:

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
Nach dem Login kopieren

Verwendung in a Ansicht:

result = get_rserve().eval('3 + 5')
Nach dem Login kopieren

Dieser Ansatz stellt einzigartige Verbindungen pro Benutzer bereit und ermöglicht die Pflege sitzungsspezifischer Daten- oder Dienstverbindungen in Flask-Anwendungen.

Das obige ist der detaillierte Inhalt vonWie pflege ich eindeutige Rserve-Verbindungen pro Benutzersitzung in Flask?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage