python3 tornado开发TCP服务程序,也是666

2018-01-04 11:46:51 浏览数 (1)

上一次利用tornado开发了一个http API服务程序,在centos7.4 64位 2C/4G的服务器上进行了一次,很轻松的rps就到10000每秒,利用pyenv安装pypy后,再次测试能达到17000每秒,C10K不再是一个问题。

突发奇想,看看tornado开发TCP服务器怎样,至于TCPServer的源码可以自己阅读,同样采用了异步的设计架构,速度也是很快(开发快,运行速度也快)

先放代码上来:

class MyServer(TCPServer):

def __init__(self, io_loop=None, **kwargs):

TCPServer.__init__(self, io_loop=io_loop, **kwargs)

@gen.coroutine

def handle_stream(self, stream, address):

print('New Client',address)

while True:

try:

data_h = yield stream.read_bytes(1)

if data_h == b'xFE':

data = yield stream.read_until(b'xFE')

print(data)

msg = yield self.do_data(data)

yield stream.write(msg)

except StreamClosedError:

logging.warning("Lost client at host %s", address[0])

break

except Exception as e:

print(e)

设计了一个16进制的传输数据包,每帧数据头尾设定为固定标记

@gen.coroutine

def do_data(self,data):

data=bytearray(data)

if data[0]==0x1:

msg='Hello'

elif data[0]==0x2:

msg='你好'

else:

msg='Hi'

data=bytearray(msg.encode())

data.insert(0,0xfe)

data.append(0xfe)

return data

def main():

server = MyServer()

server.bind(8013, '127.0.0.1', backlog=65535, reuse_port=True)

server.start(0) #多进程模式

在windows环境下,部分特性不支持,需要修改如下:

server.bind(8013, '127.0.0.1', backlog=65535, reuse_port=False)

server.start()

ioloop.IOLoop.instance().start()

是不是看着很简单,tornado已经将tcpserver封装好了,只需要重载handle_stream,根据自己的业务需求,稍作改动,已经个简单的TCP服务器就出来了。

0 人点赞