Misingi ya kufanya kazi na zmq kwenye python, kuunda ufunguo rahisi / duka la thamani

Utangulizi

Wacha tuangalie mfano wa duka rahisi la vitufe/thamani, kama vile memcache. Imeundwa kwa urahisi: data huhifadhiwa kwenye kumbukumbu katika muundo wa hashmap. Inapatikana kupitia soketi ya TCP. Katika Python, hashmap ni amri ya kawaida. Tutatumia zeromq kupata ufikiaji.

marekebisho

Ili kusakinisha kifurushi hiki katika debian/ubuntu Ingiza tu kwenye koni
sudo apt-get install libzmq-dev
sudo pip install zmq

Kanuni

Tuandike darasa la kufanya kazi na seva:
Aina ya soketi ya zmq inayotumika ni REQ (Ombi, ombi), tunatuma ombi na kusubiri jibu.
Ili kuhifadhi na kusambaza aina yoyote ya data kwenye mtandao, tunatumia moduli ya kawaida ya kachumbari. "Itifaki" ya operesheni ni nakala ya maadili matatu: (amri, ufunguo, 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'
Matumizi ya

kache = SuperCacher ()
cache.set('ufunguo', 'thamani')
cache.get('ufunguo')

Kama kazi ya nyumbani, boresha utekelezaji kwa kuongeza uwezo wa kubainisha anwani/mlango unapounda mfano wa darasa.

Sasa tutaandika sisi wenyewe. seva.
Wakati huu, tunatumia tundu la REP(REPly, response)—tunasubiri ombi na kutuma jibu. Tunachanganua ombi na kujibu kwa 'sawa' kwa kuandika au kwa data/Hakuna kwa ajili ya kusoma.

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

Ili kujaribu kila kitu pamoja, tunazindua seva na amri
python daemon.py

Kwenye kichupo kinachofuata, zindua Python katika hali ya maingiliano.

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

Muujiza, inafanya kazi! Sasa unaweza kuandika kwa ujasiri "maendeleo ya hifadhi ya thamani-msingi kwa kutumia itifaki ya zmq" kwenye wasifu wako.

Chanzo: mapenzi.com

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster