Dasar nggarap zmq ing python, nggawe toko kunci / nilai sing prasaja

Pambuka

Ayo goleki conto panyimpenan kunci/nilai sing prasaja, kayata memcache. Iki dirancang kanthi prasaja - data disimpen ing memori, ing struktur hashmap. Dheweke diakses liwat soket tcp. Ing Python, hashmap minangka dict biasa. Kanggo akses kita bakal nggunakake zeromq.

imbuhan

Kanggo nginstal paket iki ing debian/ubuntu tinggal mlebu wae nang konsol
sudo apt-get install libzmq-dev
sudo pip install zmq

Kode

Ayo nulis kelas kanggo digarap karo kita server:
Jinis soket zmq sing digunakake yaiku REQ (REQuest, request), kita ngirim panjalukan lan ngenteni respon.
Kanggo nyimpen lan ngirim jinis data liwat jaringan, kita nggunakake modul pickle standar. "Protokol" karya minangka tuple saka telung nilai: (command, key, data)

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'
Gunakake

cache = SuperCacher()
cache.set('key', 'value')
cache.get('kunci')

Minangka peer, nambah implementasine kanthi nambah kemampuan kanggo nemtokake alamat / port nalika nggawe conto saka kelas.

Saiki kita bakal nulis dhewe. server.
Wektu iki soket REP (REPly, respon) digunakake - kita nunggu panjalukan, ngirim respon. We parse panjalukan lan nanggapi salah siji karo 'ok' ing cilik saka nulis, utawa karo data / Ora ana ing cilik saka maca.

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()

Kanggo nyoba kabeh bebarengan, kita miwiti server karo printah
python daemon.py

Ing tab sabanjure, bukak python ing mode interaktif.

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

Oh Ajaib, kerjane! Saiki sampeyan bisa nulis kanthi aman ing resume "pangembangan panyimpenan kunci-nilai nggunakake protokol zmq"

Source: www.habr.com

Tuku hosting sing dipercaya kanggo situs kanthi proteksi DDoS, server VPS VDS 🔥 Tuku hosting situs web sing bisa dipercaya nganggo proteksi DDoS, server VPS VDS | ProHoster