干货分享!Python三大web框架简单介绍
1、Django
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
2、Flask
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
Flask 很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。Flask 框架学会以后,可以考虑学习插件的使用。例如使用 WTForm + Flask-WTForm 来验证表单数据,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制。
3、Tornado
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
关于干货分享!Python三大web框架简单介绍,环球青藤小编就和大家分享到这里了,学习是永无止境的,学习一项技能更是受益终身,所以,只要肯努力学,什么时候开始都不晚。如果您还想继续了解关于python编程的学习方法及素材等内容,可以点击本站其他文章学习。
游戏 行业是阿里云最早聚焦的行业之一,近年来 游戏 行业的变化、云计算产品技术的变化都与日俱进。随着行业业务的变化、技术架构的演进以及阿里云产品的迭代演进,整体的产品技术选型在不同的 游戏 场景、业务场景也不尽相同。本文将聚焦阿里云弹性计算产品在 游戏 行业的方案实践经验。
当前, 游戏 行业的各种场景和行业发展密不可分。简单回顾电子 游戏 的发展,80年代的黑白机,90年代的PC单机 游戏 ,00年代前夕随着互联网的发展网络 游戏 开始盛行,2010年后随着移动设备的逐渐普及,手游在国内开始兴起。
从 游戏 终端来区别,主要有:主机 游戏 (往往是3A 游戏 )、PC 游戏 、移动 游戏 和网页 游戏 等。目前出现跨平台多端 游戏 ,以及云 游戏 化的趋势。
关于 游戏 的品类区别会有非常多的维度:RPG(角色扮演)、MOBA类、竞技类、FPS(射击类)、休闲类、卡牌类、棋牌类、SLG(策略类)等等。目前有多品类融合玩法裂变的趋势。
随着国内防沉迷、版号因素,近年来 游戏 行业诞生了越来越多的精品 游戏 ,出海全球化乃至区域化,以及整体存量用户增速放缓,长线运营、精细运营以及私域社区等运营方式也在悄然变化。
不同的业务场景技术架构不尽相同,如竞技类 游戏 和卡牌类 游戏 对计算的需求就有所区别,云 游戏 与常规的网络 游戏 架构也有所区别。这里主要从 游戏 服和 游戏 平台、大数据、云 游戏 这四个目前常见的场景简单介绍其架构。
游戏 服,从 游戏 类型来看有RPG、FPS、MOBA、SLG、棋牌、休闲等等;从 游戏 平台来看通常有主机、手机、PC等;从业务发行来看有全球、国内、海外,从部署架构来看有集中部署和分区部署;从技术架构来看, 游戏 行业也有逐渐分层解耦的趋势,但与互联网应用相比,有一定其独特性。
因为 游戏 的强交互性特点, 游戏 技术架构与其他互联网应用相比有一定独特性。 游戏 需要保持会话连接,也就是从一个客户端到服务端的长连接,便于对客户端中玩家的操作、行为等进行及时的反馈以及推送给共同 游戏 或对战的其他玩家,所以 游戏 普遍对网络质量更加敏感,网络质量较差的情况会使长连接断开或重连,引起玩家掉线。 游戏 也需要保持会话的状态,既服务端会保持一份玩家的实体,当玩家进行操作时,下次通信的数据会依赖之前的通信的数据,这也是一些MMO(多人在线)大型 游戏 对网络吞吐性能要求较高的原因之一。再比如FPS、MOBA类等多人对战类 游戏 ,交互性更强,对网络延迟容忍度更低,要求低延迟。因为 游戏 需要比较高密度的记录玩家的操作以及结果,所以有频繁写入数据的特点,这类场景需要较强的IO性能。因为 游戏 强交互性、低延迟的特点,其技术架构也和互联网应用不同,在逐渐分层解耦的同时,需要保证 游戏 玩家的交互效果,同时也会依赖到底层服务器的计算能力。
这些都是 游戏 场景普遍存在的特点:长连接保持会话、保持状态、低延迟网络、高IO吞吐、高计算性能。
游戏 的部署架构会结合 游戏 业务特点、 游戏 运营需求来制定 游戏 服务,有分区分服、全区全服业务逻辑,分区分服还是全区全服,最大的架构差异在于数据是不是一套。而从部署方式看,主要是集中式部署和分区域部署。
集中部署就是不论 游戏 玩家在哪里, 游戏 服务集中在一个区域,适合对网络延迟要求通常不高的 游戏 类型,如休闲类;分区部署是指 游戏 服务器根据 游戏 玩家地域分布,分区域部署,方便就近接入,适合对网络延迟要求较高的 游戏 类型,如MOBA、FPS类。
典型架构
MMO类有高并发特点,大量玩家并发的高计算量负载对服务器的计算能力和稳定性有着极高的要求。同时MMO类 游戏 有着比较强的PVE或PVP特性,对网络延迟的容忍度较低。
其中网关服务器负责所有网络数据包的转发,通常是网络负载较集中的点,对于网络吞吐能力要求较高。单个 游戏 区承载玩家数量高,逻辑服务器通常按照场景地图来划分,规模再大会通过分区的方式实现。
数据中心服务器负责缓存玩家数据并异步入库,保障玩家客户快速获取和写入数据,对于可用性要求较高,需要配合应用层实现数据容错机制。
日志服务器承载了大区所有业务行为的日志收集及处理的压力,对磁盘写入性能要求较高,通常采用多台分组方式实现。
(1)MMO 游戏 服性能与稳定需求,建议使用最第7代ECS实例,根据实际需求选型c计算型(CPU与内存配比1:2)/g通用型(1:4)/r内存型(1:8),Intel Ice Lake 29GHz基频35GHz睿频提供超高性能,能更好地优化 游戏 体验。
(2)异步落库以及日志服务器,对于磁盘读写性能要求高的场景,建议云上使用ESSD PL 0/1/2/3根据业务性能需要选择,避免磁盘读写瓶颈。
(3)在 游戏 日常版本更新中,需要各个地域Region镜像的快速复制,基于ESSD快照异地复制的能力,能够提升镜像复制效率。
(4)分区分服等场景往往需要快速地开服滚服合服,通过CADT云速搭、ESS弹性伸缩、OOS运维编排、ROS资源编排等云上运维工具搭配产品使用,能够提升云上运维效率。
ii FPS、MOBA类 游戏 架构介绍
MOBA类 游戏 主要包括PVP系统、PVE系统、 游戏 平台等几个主要部分,其中PVP战斗是MOBA/FPS 游戏 的核心。
PVP、PVE、 游戏 平台功能部署于同一VPC中,构成 游戏 大区;战斗服务器(往往)单独跨地域部署。
游戏 客户端首先接入到登录服务器中,完成登录认证、计费等 游戏 平台逻辑。为避免单点问题,所以 游戏 平台服务往往需要高可用方案。可利用云上高可用方案,包括便捷的运维工具满足业务高可用需求。
FPS/MOBA竞技 游戏 ,往往对延迟特别敏感,可以想象,竞技类 游戏 中对战的 游戏 场景:玩家操控人物,在地图里步伐飘逸,枪声密集,每一颗子弹都是一次时间加上空间的矢量计算,而且需要在主进程中完成计算,那么算力需求就随着房间玩家数量上升而指数爆炸,5V5的房间和大房间100人(吃鸡)对算力的需求完全不同。
游戏 这部分重算力场景,推荐阿里云7代高主频或七代实例,更高的单核性能提供更好的战斗效果。
战斗房间类 游戏 ,因为业务本身峰谷特性,灵活地使用云上资源的弹性能力,往往会较好地优化整体的资源使用成本。阿里云弹性计算本身提供了非常灵活的付费方式,包括常规的按量实例、包月包年实例、以及通过节省计划/预留实例券去抵扣按量实例资源,兼顾资源灵活使用的同时达到更优的成本。
此外,为更进一步释放开发运维的效率,当前一些 游戏 也采用了容器化技术架构,阿里云的ACK+ECS/ECI弹性容器实例组合搭配使用,更进一步释放了基础资源的灵活性和弹性能力。
业务场景
游戏 平台(不限于FPS、MOBA类)主要提供的服务:官网、客服、注册、登录、充值、兑换、商城、推送、公告、社区、SDK及邮件、短信等公共服务;包括内容审核、视频录制、弹幕、转码、剪辑、RTC这些业务需要的基础服务,以及运维监控、发布平台、测试平台这些运维等平台服务。
这部分更接近于通用的互联网技术架构,以服务为颗粒度解耦,接入->网关->应用->数据库。
技术特点
这往往通常需要构建高可用基础架构来提升稳定性,业务突发期往往需要一定的弹性能力。相比于 游戏 服务这部分容器化就更加普及,也更容易通过云上的比如弹性容器实例去应对流量峰值场景。在视频录制场景,对实时性要求较高时,往往会基于GPU能力构建,这部分阿里云也提供了vGPU/cGPU能力,释放GPU的灵活性。
大数据是当前 游戏 业务经营、 游戏 运营主要的技术手段,主要面向平台数据运营、 游戏 数据分析、广告转化分析、安全运营分析等 游戏 核心运营场景。不同的场景对实时性要求不同,实时查询检索通常是经营分析、客户受理、玩家监测、在线等场景;离线报表通常是玩家行为分析、用户画像、特征挖掘等场景。
总体而言,实时性业务更多是业务查询类、简单计算类任务,比如买量转化的分析;离线类基本是分析类、预测类任务,比如 游戏 玩法分析。
从技术架构来看,得益于开源社区技术栈的高丰富度,大数据具体的技术选择非常之多,整体从存算一体到存算分离,也诞生像数据仓库、数据湖乃至湖仓一体等概念。
从数据架构流程来看,从数据源->数据采集、传输->数据计算、存储->数据应用,其中可选看技术方案也需要因地制宜。
从部署架构来看,不同的 游戏 公司处在不同的数据建设阶段,会有不同的选择倾向,包括完全自建、基于云自建大数据、基于云上托管、以及利用更多云上成熟的产品技术去丰富整体的大数据能力集,而后者也成为越来越多客户的选择。
拿云上大数据方案举例来讲,比如实时计算部分,选择SLS采集、Kafka数据网关通道,通过Flink做数据计算,通过ES或CK做数据分析,通过ADB以及QuickBI做数据应用展示。离线方案通过OSS做冷数据存储,Spark、Hive、HDFS等组件做数据计算存储,通过CK汇聚分析,通过Dataworks做数据应用。
具体计算存储的产品选型,主要根据不同的业务特性以及大数据应用特性来区分,根据数据容量、IOPS、吞吐、读写特点以及性价比来选择。
如刚刚举例的实时计算/近实时计算场景,Flink具备高性能、低延迟特点,所以是计算密集、网络性能高场景,推荐选型七代ECS实例或6代增强实例;如HDFS需要超大存储容量,高吞吐,推荐D系列本地盘实例,如D2S存储型本地盘实例。Remote Shuffle Service等处理结果多的场景,读写处理频繁如大量的join计算,需要综合来看计算、网络、存储性能以及综合成本来选择通用实例(如第7代ECS实例)或i系列本地盘实例。所以,最终在云上的资源选型,在性能满足的前期下,需要评估通过网络传输数据成本高(云盘),还是就地取材计算成本高(本地盘),不同模型、不同量级选择不同。
从内存处理(成本最高、性能最好、存储容量最小)、SSD本地盘、HDD本地盘、ESSD云盘、OSS对象存储(成本最优、性能一般、存储容量最大),逐渐分层解耦,还带来一个好处:充分释放了云上弹性的能力,可以利用更轻巧的弹性计算产品(如SPOT抢占式实例方式,或ECI容器实例)进行大数据计算,达到更好的弹性能力去满足业务需求的同时也能节约更多的成本。
云 游戏 主要分终端和云端。终端部分基于Windows、iOS、Linux等操作系统的终端设备包括手机、平板、电脑、电视机、VR一体机等。云端架构主要是 游戏 应用层、云 游戏 平台层、IaaS基础资源层,应用层包括PC 游戏 、手游、VR 游戏 、H5 游戏 等多种类型的 游戏 应用;平台层云 游戏 必须的运营平台、支撑平台、流化技术平台等;IaaS基础资源层包括基础网络、基于X86架构以及ARM架构的GPU服务器。
云 游戏 落地,在技术上也经历了诸多挑战,为满足端到端高性能低时延,网络调度、指令串流、编解码、多终端的SDK适配等等都是云 游戏 场景中不可避免的技术问题。
对于云端算力来讲,阿里云解决了云端渲染、串流以及编解码问题,并通过全系列GPU产品来满足云手游、端游、VR乃至企业级视觉渲染场景的需求。
总结来讲,阿里云弹性计算通过云上的串流、编码加速、渲染加速等全套的技术帮助 游戏 客户给云 游戏 玩家提供更好的性能体验,通过基于阿里云全球数据中心可以帮助云 游戏 客户覆盖更多的用户,通过GPU多种产品形态和整体的弹性能力,也帮助到 游戏 客户去更快捷更灵活的构建其云 游戏 业务。
阿里云通过多年的技术积累和持续的运营,提供了大规模的基础设施云服务,目前在全球部署了26个地域、82个可用区,通过优异稳定的性能表现帮助 游戏 客户高效稳定地运行 游戏 业务,为玩家提供极致顺滑的 游戏 体验,并通过技术手段不断地帮助 游戏 客户优化用云成本。
国内的业务出海、 游戏 出海也是现阶段大的趋势之一,很多 游戏 公司已经把出海从业务可选项变成了必选项之一。在2022年3月,阿里云上线了韩国和泰国两大Region,能够为本地化的 游戏 业务提供更流畅、更稳定的 游戏 体验,以此希望能在 游戏 客户出海的业务领域,提供更多的帮助。
当然,作为内容与 科技 两大热门领域的交叉领域, 游戏 产业日新月异,架构也随着前端业务的需要不断改变。阿里云弹性计算也针对 游戏 厂商的不同架构,陆续推出了不同的云服务器类型和付费方式,以及云上运维套件,以帮助客户降本增效。
原文链接:http://clickaliyuncom/m/1000336551/
这是肯定的,多线程的网络服务当然会比单线程要慢得多, 每多开启一个线程,系统资源就会多分配一份 特别地,如果多线程之间需要做到线程同步,那就更慢了
但是socket服务器是不可以用单线程来处理客户端请求的,因为IO读写操作总是阻塞的,不可能让一个用户总是等另一个用户处理完了才有机会被处理
异步IO操作是比较好的方法, 如果你需要做的是一些比如网络聊天室, 棋牌游戏等socket服务器, 你可以考虑Apache开源项目MINA框架来做(它封装了NIO), 这个非常简单, 看一下他们的例子程序和说明文档就可以做一个简单的服务端了
从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。\x0d\\x0d\Django: Python Web应用开发框架\x0d\ Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。\x0d\\x0d\Diesel:基于Greenlet的事件I/O框架\x0d\ Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。\x0d\\x0d\Flask:一个用Python编写的轻量级Web应用框架\x0d\ Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 \x0d\模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数\x0d\据库、窗体验证工具。\x0d\\x0d\Cubes:轻量级Python OLAP框架\x0d\ Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。\x0d\\x0d\Kartographpy:创造矢量地图的轻量级Python框架\x0d\ Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartographpy目前仍处于beta阶段,你可以在virtualenv环境下来测试。\x0d\\x0d\Pulsar:Python的事件驱动并发框架\x0d\ Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。\x0d\\x0d\Web2py:全栈式Web框架\x0d\ Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。\x0d\\x0d\Falcon:构建云API和网络应用后端的高性能Python框架\x0d\ Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。\x0d\\x0d\Dpark:Python版的Spark\x0d\ DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。\x0d\\x0d\Buildbot:基于Python的持续集成测试框架\x0d\ Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。\x0d\\x0d\Zerorpc:基于ZeroMQ的高性能分布式RPC框架\x0d\ Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一起使用的 Service API 被称为 zeroservice。Zerorpc 可以通过编程或命令行方式调用。\x0d\\x0d\Bottle: 微型Python Web框架\x0d\ Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。\x0d\\x0d\Tornado:异步非阻塞IO的Python Web框架\x0d\ Tornado的全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。\x0d\\x0d\webpy: 轻量级的Python Web框架\x0d\ webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。\x0d\\x0d\Scrapy:Python的爬虫框架\x0d\ Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
python常用的8个框架
1Django
Django是一个开放源代码的Web应用框架由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django里更关注的是模型(Model)、模板(Template)和视图(Views称为MTV模式。它们各自的职责如下:
模型(Model),即数据存取层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即表现层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。视图(View),即业务逻辑层存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。
2Tornado
Tornado是一种Web服务器软件的开源版本。Tornado和现在的主流Web服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对epollf的运用,Tornado每秒可以处理数以千计的连接,因此Tornado是实时Web服务的一个理想框架。
3bottle
Bottle是一个Python Web框架,整个框架只有一个文件,几十K,却自带了路径映射、模板、简单的数据库访问等web框架组件,确实是个可用的框架。初学web开发可以拿来玩玩,其语法简单,部署也很方便。
4webpy
webpy是一个轻量级Python web框架,它简单而且功能强大。webpy是一个开源项目。该框架由已故美国作家、Reddit联合创始人、RSS规格合作创造者、著名计算机黑客Aaron Swartz开发。webpy目前已被很多家大型网站所使用。webpy简单易学,只要有Python基础,掌握webpy就非常容易。
5Flask
Flask是一个使用Python编写的轻量级Web应用框架。其WSGl工具箱采用Werkzeug模板引擎则使用Jinja2。Flask使用BSD授权。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
6pyramid
Pyramid是一个小型,快速的Python webframework,是Pylons Project的一部分,采用的授权协议是BSD-like license。Pyramid吸取了Zope、Pylons和Django的优点,适合开发大型项目,也适合小项目,拥有非常好的性能。
7scrapy
Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、!监测和自动化测试Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web20爬虫的支持。Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。
8pandas
pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
服务端连接数据库, 用SQL 比较安全, 安全性上主要是程序的BUG, 程序难免会有BUG, 只是把大部分BUG都改好, 也就是提高安全性了。 服务器可以多台机器搭配使用(根据人数多少来定),一般一个服务器(双核CPU + 1G 内存 + 160G硬盘 + 10M光纤网络)可以供2000人使用。 网站也是程序做的,多测试下, 把BUG 都找出来,然后改好。就是提高安全性了。 电源没什么特别的要求, 400W足够用了。 详情可以咨询QQ 38234082
如果想了解即时通讯相关东东的话可以看看蘑菇街的开源项目,它提供了一套完整的解决方案(服务器端客户端)
mogutt/·GitHub
这个用了Netty的NIO框架,有发送语音的功能。
如果想要研究语音或者视频通讯的东西,WebRTC是少不了的了
WebRTC
基于地理位置的东西大部分依靠服务器端计算,mongodb的地理位置索引可以
开源社交软件可以参考一下,thinksns,thinksns采用PHPMySQL技术平台,以社交功能为核心多应用多插件机制。通过应用、插件、风格包等机制扩展功能,支持多种常见浏览器及移动客户端。拥有iPhone、Android客户端以及适合手机浏览的3G版界面;其轻量化的应用模式,稳固的底层架构支持二次开发。
0条评论