多人聊天室
基于python面向对象多人聊天室流程
项目环境
- 项目环境
- 项目名称:多人聊天室
- 项目模式:C/S
- 开发环境:win10+python3.6+pycharm
- 所需知识:python GUI编程,多线程编程,网络编程,数据库编程
程序设计
了解一下服务器扮演的角色,下面是服务器的业务流程。大致是怎样工作的
- 首先服务器在指定的端口进行监听,等待客户的链接
- 客户端链接到服务器之后,服务器开启单线程来处理该用户的请求
- 处理线程等待客户端发送的请求
- 服务器根据客户端请求类型的不同,调用不同处理的函数
- 处理完客户端请求之后,再次回到第三步继续等待处理客户端新的请求
客户端退出登录,服务器也会关闭对客户端的处理线程,释放资源
响应协议设计
我们都知道三次握手和四次挥手,这里呢我们约定了客户端发送什么样格式的数据给服务器,服务器又需要返回什么样格式的数据给客户端,客户端会有不同的请求,所以我们针对不同的请求个响应定义了需求个相应号,来区分不同的请求和响应
网络上一般使用json和xml格式来传输数据,但是用他们来传输,对于我们的项目有点复杂,我们的项目没有这么复杂的数据,我们采用 |
进行分割 ,然后拿到数据进行 split
一下就可以了。
- 登录响应格式:
1001|ret|nickname|username
,其中ret
代表服务器端验证的结果,如果是0
,表示服务端验证失败,后面的nickname username
会为空字符串,若是1
,表示服务端验证成功,nickname
为服务端返回的该用户的昵称,username
是该用户的用户名。 - 聊天的响应格式:
1002|nickname|message
,nicakname
是为聊天信息发送者的昵称,message
是发送的聊天信息
下面我们定义了服务端需要的一些常量,以及为了实现客户端和服务端通信定义的一些协议编号,协议编号如下
config.py
# ----服务器相关配置----
SERVER_IP = '127.0.0.1' # 服务器IP地址
SERVER_PORT = 8090 # 服务器端口号
# ----数据协议相关配置----
REQUEST_LOGIN = '0001' # 登录请求
REQUEST_CHAT = '0002' # 聊天请求
RESPONSE_LOGIN_RESULT = '1001' # 登录结果响应
RESPONSE_CHAT = '1002' # 聊天响应
DELIMITER = '|' # 自定义协议数据分隔符
面向对象的思想
界面展示: