asyncore实现聊天室实战一

一、主要知识点

  • asyncore作为服务器端的主要用法
  • async_chat模块的使用
  • pySimpleGUI界面框
  • telnetlib作为客户端socket模块

二、如何设计一个聊天室的应用?应该考虑哪些方面

  • 必要条件:服务器端、多客户端
  • 必要约束:数据传输协议—以换行符作为消息的分隔符
  • 原理:服务器监听消息来源、客户端连接服务器并发送消息到服务器

三、async_chat模块介绍

他是dispacher这个类的抽象子类,定义了一些专门数据传输方面的方法,非常有利于实现数据传输。

  • 主要方法:

  • collect_incoming_data:接收数据

  • found_terminator:当输入数据流符合由set_terminator设置的终止条件时被调用

  • set_terminator:设置终止条件

  • push:向数据传输队列压入要传输的数据

四、聊天室服务器的基本功能

  • 接收客户端的连接
  • 保存登陆用户信息
  • 处理各种传输过来的消息
  • 维护客户的聊天状态

五、聊天室的结构设计

  • ChatServer:类似于socket-server角色,它负责接收客户端连接请求并且要创建socket对象,创建好的socket对象要传给ChatSession对象进行保存使用,使得客户端能够持续和服务器端进行通信。

  • ChatSession:保存socket连接对象,负责与客户端进行实际的通信,继承于async_chat这个父类,主要的方法:collect_incoming_data用于数据的存储,定义found_terminator来设置聊天的数据传输规则,以换行符标识每一条信息,handle_close处理用户退出聊天。

  • CommandHandler:用于自定义协议,类似于开发httpserver的时候的协议格式定制处理。在代码中为了方便处理,可以定义方法的预设格式,比如所有的方法都由do_开头,然后在代码中我们可以通过反射的方法来直接调用处理。

  • Room(CommandHandler):主要作用维护存有所有用户的session列表以及广播发送消息处理。二是维护当前用户的聊天状态,聊天状态一般为登录聊天室、登出聊天室以及正在聊天等基本状态,不同的状态做不同的事情,所以需要为Room创建几个不同的子类对应不同的聊天状态。LoginRoom,LoginoutRoom,ChatRoom。

六、PySimpleGUI

  • 优势:

  • 基于传统的事件驱动

  • 简化布局方式,默认采用简单线性网络布局

  • 自动处理事件的回调

发布了33 篇原创文章 · 获赞 0 · 访问量 938

猜你喜欢

转载自blog.csdn.net/nickyff/article/details/104558782
今日推荐