一个专属聊天软件开发,python码农赚了三千块!

点击上方“程序员大咖”,选择“置顶公众号”

关键时刻,第一时间送达!640?640?wx_fmt=gif


作者:Python新世界

链接:https://www.jianshu.com/p/c9bfd93edbab

程序员大咖整理发布,转载请联系作者获得授权


一、实验介绍


1.1 实验内容

本实验使用 wxPython 、asynchat、_thread 等模块开发一个图形界面的聊天室程序。


1.2知识点

  • asyncore、asynchat模块使用

  • wxPython图形开发


1.3实验环境

  •   python3.5

  对于实验环境中使用的wxPython,在环境中我们已经给出了对应的安装包。


640?wx_fmt=jpeg


二、原理解析


录聊天室,并与其他成员进行聊天。


由于 Python 是一门带 GIL 的语言,所以在 Python 中使用多线程处理IO操作过多的任务并不是很好的选择。同时聊天服务器将同多个 socket 进行通信,所以我们可以基于 asyncore 模块实现聊天服务器。aysncore 模块是一个异步的 socket 处理器,通过使用该模块将大大简化异步编程的难度。asynchat 模块在 asyncore 模块的基础上做了进一步封装,简化了基于文本协议的通信任务的开发难度。


既然要开发聊天程序,那必然需要设计聊天时使用的协议。为了简单起见,我们将要开发的聊天服务器只支持文本协议,通过command message 的方式调用相关的操作。比如如果客户端发送以下文本,将执行相应的操作


640?wx_fmt=jpeg


以上协议流中,login, say, look, logout 就是相关协议代码。


然后使用下面的命令在/home/ shiyanlou/code目录下创建我们需要的
server.py和client.py 文件: 


640?wx_fmt=jpeg


三、服务器类


这里我们首先需要一个聊天服务器类,通过继承asyncore的dispatcher类来实现,我们编写server.py文件:


640?wx_fmt=jpeg


这里需要补充说明的是,对于asyncore 和asynchat模块来讲,在python3.6中,使用asyncio模块代替,但是实验环境中我们使用的是python 3.5,也由于wxPython 对于Linux下CPython 的支持,所以我们依然使用python 3.5。


3.1 会话类


有了服务器类还需要能维护每个用户的连接会话,这里继承asynchat的async_ chat 类来实现,在server.py文件中定义,代码如下 


640?wx_fmt=jpeg


3.2 协议命令解释器


在之前的分析中,我们设计了聊天服务器的协议,我们需要实现协议命令的相应方法,具体来说就是处理用户登录,退出,发消息,查询在线用户的代码。在server.py 文件中定义, 


640?wx_fmt=jpeg


3.3 房间


接下来就需要实现聊天室的房间了,这里我们定义了三种房间,分别是用户刚登录时的房间、聊天的房间和退出登录的房间,这三种房间都继承自CommandHandler,在server.py 文件中定义,代码如下:

 

640?wx_fmt=jpeg


四、登陆窗口


完成了服务器端后,就需要实现客户端了。客户端将基于 wxPython 模块实现。 wxPython 模块是 wxWidgets GUI 工具的 Python 绑定。所以通过 wxPython 模块我们就可以实现 GUI 编程了。同时我们的聊天协议基于文本,所以我们和服务器之间的通信将基于 telnetlib 模块实现。


登录窗口通过继承 wx.Frame 类来实现,编写 client.py 文件,代码如下:


640?wx_fmt=jpeg


4.1 聊天窗口


聊天窗口中最主要的就是向服务器发消息并接受服务器的消息,这里通过子线程来接收消息,在client.py文件中定义,代码如下: 


640?wx_fmt=jpeg


五、执行


首先,我们执行 server.py ,如下图所示:


640?wx_fmt=jpeg


这时,我们再打开一个终端,执行 client.py 文件,如下图:


640?wx_fmt=jpeg


  • 输入对应的信息之后,点击Login ,再次重复上一步骤,使用另一-用户名shiyanlou002登陆,如下图: 


640?wx_fmt=jpeg


  • 在最终的示例中,我们可以分别通过shiyanlou001 和shiyanlou0e2 的客户端发送消息,此时,所有的在线用户都可以收到对应的消息。 

640?wx_fmt=gif640?【点击成为源码大神】


▼点击「阅读原文」进入程序员商城

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值