#背景
互联网上在线聊天服务的种类很多, 如IRC, 在Python中实现这样一个方法, 可以使用Twisted
框架.
自己写一个的原因:
学习网络编程基本的知识
看书笔记总结
聊天服务器基本的功能如下:
- 服务器能接受不同客户端的连接
- 允许用户并行操作
- 能够解释命令, 如在shell中的操作
#初次实现
###1 迷你服务器
###2 可以接受连接的服务器
handle_accept
方法会调用允许客户端连接的self.accept函数. 他返回一个连接和一个地址, 初始化的过程, 调用了create_socket
创建套接字, bind
来绑定端口, listen
用来监听. 试着运行下面的语句:
会出现如下
fish@love67:~$telnet localhost 5267
Connection form 127.0.0.1
###3 具有一些清理功能的服务器
上面的程序使用键盘关闭(ctrl + c等)会导致堆栈跟踪, 为了避免这类情况, 可以在 try/except
语句放置loop
. 再加上一点清理功能, 如下:
###4 ChatSession类
下面代码中, async_chat
类(位于asynchat中)的好处是他隐藏了大多数基本的套接字读写操作, 为了让他起作用, 只需要覆盖两个函数: collect_incoming_data
和found_terminator
. 前者每次从套接字中读取一些bit文本时调用, 后者在读取一个结束符是调用.
值得注意的是:
- code>set_terminator</code>方法用于终止对象, 设定为网络卸协议中经常使用的终止符\r\n
ChatSession
对象会将目前读取的数据保存为字符串列表data, 当读取更多数据时, collect_incoming_data
会自动调用, 将读取的数据追加到列表中
found_terminator
方法在读取到终止符时停止, 并将self.data
重置为空列表.
ChatServer
保存会话列表
#整合
##简单的聊天服务器
blog comments powered by