Python +redis 聊天室

来源:互联网 发布:ad软件怎么安装 编辑:程序博客网 时间:2024/05/18 03:51

1、Service.py


# encoding=utf-8# 载入模块from socket import *  import json, time, threadingimport structfrom urllib import unquote"""1、客服端与服务端建立连接2、把客户端的链接存入redis中3、客户端与客户端通过对方链接进行通信4、实现对话优化"""config = {      'HOST': 'localhost',      'PORT': 11011,      'LISTEN_CLIENT': 50,      'KEY': '391f10fadc339e9ec5fa15af60030ac1',      'SIZE': 2048,      'TIME_OUT': 1000,      'HEART_TIME': 5,      'MAGIC_STRING': '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',      'HANDSHAKE_STRING': "HTTP/1.1 101 Switching Protocols\r\n"               "Upgrade:websocket\r\n"               "Connection: Upgrade\r\n"               "Sec-WebSocket-Accept: {1}\r\n"               "WebSocket-Location: ws://{2}/chat\r\n"              "WebSocket-Protocol:chat\r\n\r\n"  }class Service():    """     服务端基类     """            def __init__(self):                #1、第一步建立链接参数        self.sock = socket(AF_INET,SOCK_STREAM)          #2、绑定指定地址          self.sock.bind((config['HOST'], config['PORT']))        #3、监听请求,超过链接数拒绝请求        self.sock.listen(config['LISTEN_CLIENT'])        # 所有监听的客户端          self.clients = {}          self.thrs = {}          self.users = {}          self.stops = []                        #print(sock.recv(1024).decode())        print u"\n正在监听链接请求..."            def listen_client(self):                while True:                        # 4、循环监听,接收请求链接                        connection,addr = self.sock.accept()                                    print "\n客服端链接ip地址为: "            print "\n",addr                        address = addr[0] + ':' + str(addr[1])  # ip:port            global ip,port            ip = addr[0]            #print ip            port = str(addr[1])            #print port            self.redis()            try:                               connection.settimeout(5)                # 握手,判断客服端是A还是B,也可以根据频道来广播                buf = connection.recv(1024)                if buf == 'A':                                        connection.send('A send massage welcome to python server!')#给链接客服端发送消息                else:                                        connection.send('B send massage please go out!')            except socket.timeout:                                             print 'time out'            connection.close()            #self.sock.close()                     headers = {}                       #print u'\n服务端发送的信息:', address          header, data = buf.split('\r\n\r\n', 1)      def redis(self):        import redis                print "\nredis oss...."        # 链接redis数据库        r = redis.Redis(host='localhost', port=6379, db=0)        # 往redis中写数据        r.set('ip',ip)        r.set('port',port)                print "\nip:",(r.get('ip')),"port:",(r.get('port'))if __name__ == '__main__':      c = Service()    c.listen_client()

2、Client.py


# encoding=utf-8# 载入模块from socket import *  import json, time, threadingimport structfrom urllib import unquote"""1、客服端与服务端建立连接2、把客户端的链接存入redis中3、客户端与客户端通过对方链接进行通信4、实现对话优化"""class Client():    def __init__(self):        self.sock = socket(AF_INET, SOCK_STREAM)            self.sock.connect(('localhost', 11011))          self.sock.send(b'B')#发送一个1                print(self.sock.recv(1024).decode())        print u"\n已建立连接..."        self.sock.close()        if __name__ == '__main__':        c = Client()  

3、Redis.py

   操作Redis的一些方法

   

# encoding=utf-8# 载入模块import redis# 链接redis数据库r = redis.Redis(host='localhost', port=6379, db=0)# 往redis中写数据r.set('hello','world')print(r.get('hello'))r.set('Key', 'value')# 查看对应的值print 'Key', r.get('Key')r['diaosi'] = 'yy'r.set('xueba', 'xuexi')r['xuezha'] = 'wan'print (r.get('xuezha'))# 查看数据库中有多少个key,多少条数据print r.dbsize()# 将数据保存到硬盘中(保存时阻塞)r.save()# 查看键值是否存在print "是否存在结果为:",r.exists("doubi")# 列出所有键值print "列出所有键值",r.keys()# 删除键值对应的数据print r.delete('diaosi')print r.delete('xuezha')# 删除当前数据库所有数据r.flushdb()          



原创粉丝点击