Basis fan wurkjen mei zmq yn python, it meitsjen fan in ienfâldige kaai / wearde winkel

Ynlieding

Litte wy nei in foarbyld sjen fan in ienfâldige kaai / wearde opslach, lykas memcache. It is ienfâldich ûntworpen - de gegevens wurde opslein yn it ûnthâld, yn in hashmapstruktuer. Se wurde tagong fia in tcp-socket. Yn Python is hashmap in gewoane dict. Foar tagong sille wy zeromq brûke.

oanpassing

Om dit pakket te ynstallearjen yn debian/ubuntu gewoan yn 'e konsole ynfiere
sudo apt-get install libzmq-dev
sudo pip install zmq

koade

Litte wy in klasse skriuwe om mei ús te wurkjen tsjinner:
It brûkte type zmq-socket is REQ (REQuest, fersyk), wy stjoere in fersyk en wachtsje op in antwurd.
Foar it bewarjen en ferstjoeren fan alle soarten gegevens oer it netwurk, brûke wy de standert pickle-module. It wurk "protokol" is in tuple fan trije wearden: (kommando, kaai, gegevens)

import zmq
import pickle

class SuperCacher:
    def __init__(self):
        context = zmq.Context()
        self.socket = context.socket(zmq.REQ)
        self.socket.connect('tcp://127.0.0.1:43000')

    def get(self, key):
        self.socket.send(pickle.dumps(('get', key, None)))
        return pickle.loads(self.socket.recv())

    def set(self, key, data):
        self.socket.send(pickle.dumps(('set', key, data)))
        return self.socket.recv() == b'ok'
Gebrûk

cache = SuperCacher()
cache.set('key', 'wearde')
cache.get('key')

As húswurk, ferbetterje de ymplemintaasje troch it tafoegjen fan de mooglikheid om in adres / haven oan te jaan by it meitsjen fan in eksimplaar fan in klasse.

No sille wy it sels skriuwe. server.
Dizze kear wurdt de socket REP (REPly, antwurd) brûkt - wy wachtsje op it fersyk, stjoere in antwurd. Wy parse it fersyk en reagearje of mei 'ok' yn it gefal fan skriuwen, of mei gegevens / Gjin yn it gefal fan lêzen.

import pickle
import json
import zmq

def run_daemon():
    memory = {}

    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind('tcp://127.0.0.1:43000')

    while True:
        try:
            command, key, data = pickle.loads(socket.recv())
            if command == 'set':
                memory[key] = data
                socket.send(b'ok')
            elif command == 'get':
                result = memory.get(key, None)
                socket.send(pickle.dumps(result))
        except Exception as e:
            print(e)

if __name__ == '__main__':
    run_daemon()

Om alles tegearre te testen, begjinne wy ​​de tsjinner mei it kommando
python daemon.py

Start python yn 'e folgjende ljepper yn ynteraktive modus.

>>> from lib import SuperCacher
>>> cache=SuperCacher()
>>> cache.set('key', 'value')
True
>>> cache.get('key')
'value'

Oh wûnder, it wurket! No kinne jo feilich skriuwe yn jo cv "ûntwikkeling fan opslach fan kaai-wearde mei it zmq-protokol"

Boarne: www.habr.com

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster