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

Posted 老周开讲了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 tornado开发TCP服务程序,也是666相关的知识,希望对你有一定的参考价值。

上一次利用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服务器就出来了。



以上是关于python3 tornado开发TCP服务程序,也是666的主要内容,如果未能解决你的问题,请参考以下文章

python3 tornado 自启动服务

[Python3网络爬虫开发实战] 1.6.2-Tornado的安装

1.Tornado简介&&本专栏搭建tornado项目简介

Python Tornado框架(ioloop对象分析)

tornado6与python3.7,异步新姿势

Centos7部署tornado项目