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
