用python的twisted做个简单游戏服务器原形--客户端连接monitor管理类
2012-08-23 23:23
387 查看
''' Created on 2012-8-14 @author: qs ''' #from twisted.internet import epollreactor #epollreactor.install() from twisted.internet import selectreactor selectreactor.install() from twisted.internet.protocol import ClientFactory, Protocol from twisted.internet import reactor from buffer import Buffer import struct import sys import threading from msgqueue import MessageQueue class Service(Protocol): def __init__(self): self.index = 0 self.identify = 0 def connectionMade(self): print "new client come!" self.factory.service_tick = self.factory.service_tick + 1 self.identify = self.factory.service_tick self.factory.bind_service(self) def connectionLost(self, reason): print "new client lost" self.factory.unbind_service(self) def dataReceived(self, data): message = struct.pack('i%ds' % (len(data)),self.identify,data) self.factory.push_message(message) def dataSend(self, date): self.transport.write(date) class Monitor(ClientFactory, threading.Thread): protocol = Service def __init__(self): threading.Thread.__init__(self) self.message_queue = MessageQueue(self) self.service_tick = 0 self.addr = 'localhost' self.port = 1989 def clientConnectionFailed(self, connector, reason): print "engine connection failed:", reason.getErrorMessage() reactor.stop() def clientConnectionLost(self, connector, reason): print "engine connection lost:", reason.getErrorMessage() reactor.stop() def startedConnecting(self, connector): print "started connecting engine" def run(self): self.message_queue.start() # monitor_reactor = epollreactor.EPollReactor() monitor_reactor = selectreactor.SelectReactor() # monitor_reactor.connectTCP(self.inet_addr.addr, self.inet_addr.port, self) monitor_reactor.listenTCP(self.port, self) monitor_reactor.run(installSignalHandlers=False) def local_addr(self, addr='localhost', port=1989): self.addr = addr self.port = port def bind_service(self, service): pass def unbind_service(self, service): pass def find_service(self, id): pass def push_message(self,message): self.message_queue.push(message) def process_message(self, message): pass以上是客房端连接有消息连接来的时候一个一monitor类,里面启动了一个线程让reactor运行,一个message_queue线程用来重组客户端发来的消息。
相关文章推荐
- 用python的twisted做个简单游戏服务器原形--客户端逻辑ClientService类
- 用python的twisted做个简单游戏服务器原形--客户端消息处理和重组类MessageQueue
- python笔记-Twisted 实现简单的服务器客户端程序
- Python处理多个客户端连接---派生服务器
- python socket简单tcp服务器客户端
- 简单的无连接的udp服务器和客户端
- 【1】Python创建简单TCP服务器与TCP客户端
- python socket实现简单的(TCP/UDP)服务器/客户端
- python2.7_1.14_编写一个简单的回显客户端/服务器应用
- 游戏大厅 从基础开始(3)——最吸引眼球的部分 客户端与服务器的连接
- python socket 简单服务器,客户端通信
- python3实现UDP协议的简单服务器和客户端
- Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
- python3 学习-1(实现简单的服务器与客户端)
- python:使用socket模块,进行服务器与客户端简单交互
- python 服务器和客户端简单原型
- 简单的python socket服务器和客户端
- python3实现TCP协议的简单服务器和客户端
- 游戏服务器之python短连接服务器(登录服务器)
- [计网] 用python语言开发一个简单的web服务器和客户端