极简版nosql

来源:互联网 发布:美工对电脑配置的要求 编辑:程序博客网 时间:2024/06/04 19:19


只有set 和 get 功能

set a 1 这是set的形式

get a 这是get的形式


#!/usr/bin/env python

# coding: utf-8

from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor
import re




class Echo(Protocol):
        #协议类实现用户的服务协议,例如 http,ftp,ssh 等
        data_arr={}
        def __init__(self, factory):
                self.factory = factory

        def connectionMade(self):
                #连接建立时被回调的方法
                self.transport.write("welcome caiwuluan!\n"+"caiwuluan > ")

        def connectionLost(self, reason):
                #连接关闭时被回调的方法
                pass

        def dataReceived(self, data):
                #接收数据的函数,当有数据到达时被回调
                is_set=re.findall(r'^set ',data)
                is_get=re.findall(r'^get ',data)
                if is_set:
                    set_data_arr=re.findall(r'set\s(\S*)\s',data)
                    if set_data_arr:
                        set_data=set_data_arr[0]
                        set_shuju_arr=re.findall(r'\s(\S*)$',data)
                        if set_shuju_arr:
                            set_shuju=set_shuju_arr[0]
                            self.data_arr[set_data]=set_shuju
                            self.transport.write('ok!'+'\ncaiwuluan > ')
                elif is_get:
                    get_data_arr=re.findall(r'get\s(\S*)',data)
                    if get_data_arr:
                        get_data=get_data_arr[0]
                        if get_data in self.data_arr.keys():
                            self.transport.write(self.data_arr[get_data]+'\ncaiwuluan > ')
                        else:
                            self.transport.write('no this key!'+'\ncaiwuluan > ')
                else:
                    self.transport.write('please (set a 1) or (get a)\n'+'caiwuluan > ')


class EchoFactory(Factory):
        #协议工厂类,当客户端建立连接的时候,创建协议对象,协议对象与客户端连接一一对应
        def buildProtocol(self, addr):
                return Echo(self)


if __name__ == '__main__':
        # 创建监听端口
        reactor.listenTCP(8007, EchoFactory())
        print 'server on listen 8007'
        # 开始监听事件

        reactor.run()


执行此文件开启服务

终端 netcat localhost 8007

原创粉丝点击