python之虚拟聊天室之简单的服务器
来源:互联网 发布:夜来风雨声花落知多少 编辑:程序博客网 时间:2024/05/16 18:09
这是一个只有简单功能的服务器 写上来 只是为了探讨一下他的原理,以及他的工作方式,这是一个很好的敏捷开发的原型。当然这只是服务器端的,当然你自己也可以写个客户端,代码如下,接下来我们开始分析:
- from asyncore import dispatcher
- from asynchat import async_chat
- import socket,asyncore
- PORT=5005
- NAME='TestChat'
- class ChatSession(async_chat):
- def __init__(self,server,sock):
- async_chat.__init__(self,sock)
- self.server=server
- self.set_terminator("\r\n")
- self.data=[]
- self.push('welcome to our chating%s\r\n'%self.server.name)
- def collect_incoming_data(self,data):
- self.data.append(data)
- def found_terminator(self):
- line=''.join(self.data)
- self.data=[]
- self.server.broadcast(line)
- def handle_close(self):
- async_chat.handle_close(self)
- self.server.disconnect(self)
- class ChatServer(dispatcher):
- #get the connection and produce the single chating class and broadcast
- def __init__(self,port,name):
- dispatcher.__init__(self)
- self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
- self.set_reuse_addr()
- self.bind(('',port))
- self.listen(5)
- self.name=name
- self.sessions=[]
- def disconnect(self,session):
- self.sessions.remove(session)
- def broadcast(self,line):
- for session in self.sessions:
- session.push(line+'\r\n')
- def handle_accept(self):
- conn,addr = self.accept()
- ChatSession(self,conn)
- if __name__=='__main__':
- s=ChatServer(PORT,NAME)
- try: asyncore.loop()
- except KeyboardInterrupt:print
当然首先这是一个可以接受连接的服务器,而且可以同时进行2个以上的客户端连接。
ChatServer类继承了来自asyncore的dispatcher,而dispatcher基本就是一个套接字对象。接着下面有几个函数
disconnect 和broadcast 这个2个函数是为了 满足客户端断开的时候将其移除会话列表,和将用户的发言广播到大厅,而 handle_accept(self)就是接受来自 accept Found at: asyncore的return either an address pair作为参数传到chatsession。
我们在分析ChatSession类,他能做到收集客户端的数据文本并进行响应,这当然得益于asynchat模块,我们只需要继承并重写其中的2个方法就可以了,其中一个是collect_incoming_data
这个函数主要目的是将数据加到data会话列表中。
found_terminator
这是发现中止符号的时候执行的 在这个例子中设定的终止符是“\r\n”,此处中止的时候执行broadcast,
还有一个handle_close
处理发现客户端断开连接后的处理。就是直接将其从会话列表中删除
本文出自 “LuoZhengWu” 博客,请务必保留此出处http://brucemars.blog.51cto.com/5288106/960964
0 0
- python之虚拟聊天室之简单的服务器
- python之虚拟聊天室服务器详解
- “服务器推”之websocket实现之简单聊天室
- Android开发之简单的聊天室(客户端与服务器进行通信)
- Android开发之简单的聊天室(客户端与服务器进行通信)
- TCP之实现简单聊天室
- 服务器虚拟化的未来之路
- apache之虚拟服务器的配置
- socket.io的使用之简单聊天室案例
- python简单的多人聊天室
- Python简单的多客户端聊天室程序
- Python Socket,并完成简单的聊天室
- Nginx之虚拟服务器配置
- Python实现简单聊天室
- python之虚拟环境virtualenv
- Python之创建虚拟环境
- 【聊天室】android 简单的聊天室
- VMware vSphere 服务器虚拟化之二十一 桌面虚拟化之完整克隆的虚拟桌面池
- 在web中使用log4j时,配置日志文件的存放位置
- ZOJ 3635 Cinema in Akiba (树状数组+二分)
- 《JavaScript权威指南》----第13章 Web浏览器中的JavaScript(2) 学习记录
- 菜单资源更新 2014 - 04 - 01
- python之html标记的妙用
- python之虚拟聊天室之简单的服务器
- python之虚拟聊天室服务器详解
- python之nntp服务器组
- 网页编辑器(修改apache+mod_python配置完成cgi脚本前奏)
- 一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(4)--关键点
- openstack nova 源码下载
- openstack nova 源码分析2之nova-api,nova-compute
- openstack nova 源码分析3-nova目录下的service.py
- openstack nova 源码分析4-nova目录下的driver.py