Zoyambira zogwirira ntchito ndi zmq mu python, kupanga chinsinsi chosavuta / sitolo yamtengo wapatali

Mau oyamba

Tiyeni tiwone chitsanzo cha makiyi osavuta / kusunga mtengo, monga memcache. Zapangidwa mophweka - deta imasungidwa kukumbukira, mu dongosolo la hashmap. Amafikiridwa kudzera pa socket ya tcp. Ku Python, hashmap ndi lamulo lokhazikika. Kuti tipeze tigwiritsa ntchito zeromq.

kusintha

Kuti muyike phukusili mu debian/ubuntu, ingolowetsani mu console
sudo apt-get install libzmq-dev
sudo pip install zmq

kachidindo

Tiyeni tilembe kalasi yoti tigwire ntchito ndi seva yathu:
Mtundu wa socket ya zmq yomwe imagwiritsidwa ntchito ndi REQ(REQuest, pempho), timatumiza pempho ndikudikirira kuyankha.
Kuti tisunge ndi kutumiza mtundu uliwonse wa data pa netiweki, timagwiritsa ntchito gawo la pickle. Ntchito "protocol" ndi gawo la zinthu zitatu: (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'
Gwiritsani ntchito

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

Monga homuweki, konzani kukhazikitsa powonjezera luso lofotokozera adilesi / doko popanga chitsanzo cha kalasi.

Tsopano tiyeni tilembe seva yokha.
Nthawi ino socket REP(REPly, response) imagwiritsidwa ntchito - tikuyembekezera pempho, kutumiza yankho. Timagawa pempho ndikuyankha ndi 'ok' polemba, kapena ndi data / Palibe powerenga.

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

Kuti tiyese zonse palimodzi, timayamba seva ndi lamulo
python daemon.py

Patsamba lotsatira, yambitsani python mumayendedwe ochezera.

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

O chozizwitsa, zimagwira ntchito! Tsopano mutha kulemba mosamala mukuyambanso kwanu "kukhazikitsa kosungirako zofunikira kwambiri pogwiritsa ntchito zmq protocol"

Source: www.habr.com

Kuwonjezera ndemanga