Python +redis 聊天室

1、Service.py


# encoding=utf-8
# 载入模块
from socket import *  
import json, time, threading
import struct
from 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, threading
import struct
from 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()
    
      



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值