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服务器就出来了。

本文来自企鹅号 - 老周开讲了媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

Hadoop数据分析平台实战——250JSSDK数据收集引擎编写离线数据分析平台实战——250JSSDK数据收集引擎编写

离线数据分析平台实战——250JSSDK数据收集引擎编写 JsSDK设计规则 在js sdk中我们需要收集launch、pageview、chargeReque...

3288
来自专栏FreeBuf

Win64bit提权0day漏洞(CVE-2014-4113)只是内核模式漏洞的开始

Win64bit提权0day漏洞(CVE-2014-4113)漏洞 攻击者经常利用已知的权限提升漏洞获得管理员级别的访问,而黑客直接利用0day漏洞进行攻击是非...

1936
来自专栏Android小菜鸡

Android FrameWork层框架

  Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层。我今天重点介绍一下应用框架层Fram...

753
来自专栏deed博客

充分利用4G 空间 C8815 修改DATA分区,扩大存储空间,重新分配内置存储空间

1474
来自专栏文渊之博

如何查看表和索引的统计信息

  这几天要求做一个服务器的统计信息,主要针对表和索引。下面我就简单分享几个查询数据表和索引统计信息的方法: 1.使用T-SQL 语句实现: select sc...

1926
来自专栏分布式系统和大数据处理

C#编写简单的聊天程序

这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考。文章大体分...

492
来自专栏Hadoop实操

如何使用Sentry为包含特殊字符的用户组授权

Apache Sentry是由Cloudera贡献给Hadoop开源社区的组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。Sentry当前可以和Hi...

642
来自专栏移动端开发

环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

前言: 环信的SDK在公司的项目中有用到,现在用到的是群聊的部分,这里我们分析总结一下自己对环信给的DEMO大概的拆解一下,说说我们怎么样充分的利用这个de...

2158
来自专栏企鹅号快讯

Python爬取网站的一些小技巧

1.最基本的抓站 2.使用代理服务器 这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。 3.需要登录的情况 登录的情况比较麻烦我把问...

2035
来自专栏逸鹏说道

SQL Server安全(3/11):主体和安全对象(Principals and Securables)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇...

2444

扫码关注云+社区