这些公司的开源项目,SwiftNIO 还提供了一些 Channel

by admin on 2020年3月13日

摘要2018年4月26日,统一推送联盟在中国信息通信研究院召开2018成员大会。来自华为、OPPO、VIVO、小米、阿里巴巴、腾讯、百度、中国移动、中国联通、中国电信等多家厂商的100余位代表参加了此次会议。前言本次会议在梳理联盟成立以来取得的工作成果的同时,为联盟后续工作指明了方向。会上,联盟秘书处从行业发展、政府支撑和用户体验的角度,向与会人员汇报了关于统一推送接口标准、内容安全、推必达业务、绿色App应用公约等相关工作的进展,得到了代表的一致认可。为了加强联盟后续管理工作的规范性,本次会议表决通过了《统一推送联盟工作组管理办法(试行)》,《统一推送联盟团体标准管理办法(试行)》,《统一推送联盟研究课题管理办法(试行)》。为了增强联盟凝聚力,更好的开展后续工作,本次会议对统一推送联盟副秘书长候选人进行了投票表决。经过与会成员投票,来自泰尔终端实验室的蒋阿芳等6人当选统一推送联盟副秘书长。本次会议对《统一推送通道层接口规范》等7份标准及技术文档进行了充分的讨论,各方参会代表积极参与、贡献力量、凝聚共识、求同存异。最终,7份标准得到参会代表的一致认可,顺利通过。本次会议取得成果简要概况如下。统一推送的接口和测试标准达成共识考虑到业务的多样性,安卓APP开发者对于推送服务有着很多个性化的需求。为了尽快和各方达成一致,联盟当前将重点放在解决开发者的共性需求层面,基于“求同存异”的原则,通过多层次的标准架构来解决开发者的不同诉求。具体方案是通道层提供基础功能(类似APNs的功能),平台层各厂商提供差异化功能,而更加个性化的功能放在应用层,由开发者来实现。基于上述原则,联盟本次会议审议了《统一推送业务需求》、《统一推送通道层接口规范》、《统一推送技术要求和测试方法》三本标准,主要聚焦统一推送通道层的核心功能集。上述标准在本次会议上基本达成一致。下一步细化相关细节后在联盟网站公开征求意见,并适时推动标准的行业应用和普及。设立“内容安全组”,倡导行业自律,共建文明推送环境党的十八大以来,党中央高度重视信息网络安全,并做出了加强国家网络安全工作的重要部署。鉴于此,联盟秘书处决定设立内容安全小组,本着行业自律的原则,积极配合国家监管机构,对推送信息内容进行安全审核,为用户提供积极健康的内容,创造良好的文化环境。会上通过了“内容审核系统框架设计标准”,建立中心节点与子节点相结合的部署方案。本着行业自律、资源共享的原则,通过多方的共同努力,完善词库和策略,为内容审核的健康发展提供有力保障。后续,联盟将制定内容审核技术要求和测试方法的标准,同时和产业各方开展审核方案的部署,加快审核平台建设,为统一推送的健康发展保驾护航。“推必达”——信令级的推送解决方案当前IP推送面临诸多问题,例如推送服务的可靠性不够高,推送通道的带宽有限,对网路环境依赖较高等。为了解决上述问题,统一推送联盟联合三大运营商,共同推出信令级推送的解决方案——推必达。推必达利用信令级通道的高可靠及广播能力,帮助开发者推送提供基于场景及业务的短信/推送的增值服务。该服务可以提供100%的到达率。同时,由于采取信令通道进行推送,具有无需后台常驻进程,无额外耗电,无额外流量,无需安装SDK的特点。“推必达”的产品特性可满足诸多垂直行业的推送需求。如银行服务提醒、移动办公通知、验证码下发等相关垂直领域。当推送触达用户后,用户无需进入短信箱读取相应信息,只需要点击推送消息通知,可直接跳转至相关App进行操作,最大限度的提升用户体验。后续,联盟将组织相关小组会议,尽快推动推必达产品的商业化进程。“绿色App”——用户的新选择一直以来,统一推送联盟将国家的要求视为责任,将用户的诉求视为目标,积极推动安卓绿色应用生态的建设。本次会议,统一推送联盟联合Android绿色应用公约联合发布了中国绿色App应用公约。该公约基于Android绿色应用公约2.0版本,呼吁App开发者切实践行社会主义核心价值观,为用户提供积极健康的内容。具体技术条款兼顾了用户隐私及用户体验,限制了App相关权限和后台行为。同时,为了更好的方便开发者支持绿色App应用公约,统一推送联盟官方网站(www.chinaupa.com)开辟了“绿色App“板块。开发者可以登录查看具体条款提交少数关键信息,即可支持公约。后续,联盟将尽快上线App测试认证服务。统一推送联盟将定期公布”支持公约“及”通过认证“的App,为有良知的开发者进行宣传。未来,我们相信,后台纯净,不侵犯隐私的“绿色App”将成为安卓用户的新选择。

摘要近日,苹果开源了一款基于事件驱动的高性能跨平台网络应用程序开发框架
SwfitNIO,它有点类似 Netty,但开发语言使用的是
Swift。1、SwiftNIO是什么SwfitNIO
实际上是一个底层工具,用于开发高性能的网络应用程序,作为“每连接一个线程”的替代方案。为了提升性能,SwfitNIO
使用了非阻塞 IO,这从它的名字就可以看出来。非阻塞 IO 与阻塞式 IO
非常不一样,因为不管是往网络上发送数据还是从网络上接收数据,应用程序都无需等待,系统内核会在有可操作的
IO 时通知 SwfitNIO。SwfitNIO 并不会提供类似 Web
框架那样的解决方案,而是致力于为上层框架提供底层的构建块。在开发 Web
应用程序时,大部分开发者不会直接使用 SwfitNIO,他们会从 Swift
生态系统众多的 Web 框架中选择一个。不过,这些框架中的大部分都使用了
SwfitNIO。2、受支持的平台SwfitNIO 的目标是支持所有可以运行 Swift
的平台。目前,SwfitNIO 可以在 macOS 和 Linux 上运行,包括:Ubuntu
14.04+macOS 10.12+3、基本架构SwfitNIO 包含了几种基本构建块,所有的
SwfitNIO
应用程序都是由这几种组件组成的。EventLoopGroupEventLoopChannelChannelHandlerBootstrapByteBuffer▶
EventLoopPromise 和 EventLoopFutureEventLoop 是 SwfitNIO 最基本的 IO
原语,它等待事件的发生,在发生事件时触发某种回调操作。在大部分 SwfitNIO
应用程序中,EventLoop 对象的数量并不多,通常每个 CPU 核数对应一到两个
EventLoop 对象。一般来说,EventLoop
会在应用程序的整个生命周期中存在,进行无限的事件分发。EventLoop
可以组合成 EventLoopGroup,EventLoopGroup 提供了一种机制用于在各个
EventLoop 间分发工作负载。例如,服务器在监听外部连接时,用于监听连接的
socket 会被注册到一个 EventLoop 上。但我们不希望这个 EventLoop
承担所有的连接负载,那么就可以通过 EventLoopGroup 在多个 EventLoop
间分摊连接负载。目前,SwiftNIO 提供了一个 EventLoopGroup
实现(MultiThreadedEventLoopGroup)和两个 EventLoop
实现(SelectableEventLoop 和
EmbeddedEventLoop)。MultiThreadedEventLoopGroup 会创建多个线程(使用
POSIX 的 pthreads 库),并为每个线程分配一个 SelectableEventLoop
对象。SelectableEventLoop 使用选择器(基于 kqueue 或
epoll)来管理来自文件和网络 IO 事件。EmbeddedEventLoop 是一个空的
EventLoop,什么事也不做,主要用于测试。▶
Channels、ChannelHandler、ChannelPipeline 和 ChannelHandlerContext尽管
EventLoop
非常重要,但大部分开发者并不会与它有太多的交互,最多就是用它创建
EventLoopPromise 和调度作业。开发者经常用到的是 Channel 和
ChannelHandler。每个文件描述符对应一个 Channel,Channel
负责管理文件描述符的生命周期,并处理发生在文件描述符上的事件:每当
EventLoop 检测到一个与相应的文件描述符相关的事件,就会通知
Channel。ChannelPipeline 由一系列 ChannelHandler 组成,ChannelHandler
负责按顺序处理 Channel 中的事件。ChannelPipeline
就像数据处理管道一样,所以才有了这个名字。ChannelHandler 要么是
Inbound,要么是 Outbound,要么两者兼有。Inbound 的 ChannelHandler
负责处理“inbound”事件,例如从 socket 读取数据、关闭 socket
或者其他由远程发起的事件。Outbound 的 ChannelHandler
负责处理“outbound”事件,例如写数据、发起连接以及关闭本地
socket。ChannelHandler
按照一定顺序处理事件,例如,读取事件从管道的前面传到后面,而写入事件则从管道的后面传到前面。每个
ChannelHandler 都会在处理完一个事件后生成一个新的事件给下一个
ChannelHandler。ChannelHandler
是高度可重用的组件,所以尽可能设计得轻量级,每个 ChannelHandler
只处理一种数据转换,这样就可以灵活组合各种
ChannelHandler,提升代码的可重用性和封装性。我们可以通过
ChannelHandlerContext 来跟踪 ChannelHandler 在 ChannelPipeline
中的位置。ChannelHandlerContext 包含了当前 ChannelHandler
到上一个和下一个 ChannelHandler 的引用,因此,在任何时候,只要
ChannelHandler 还在管道当中,就能触发新事件。SwiftNIO 内置了多种
ChannelHandler,包括 HTTP 解析器。另外,SwiftNIO 还提供了一些 Channel
实现,比如 ServerSocketChannel(用于接收连接)、SocketChannel(用于 TCP
连接)、DatagramChannel(用于 UDP socket)和
EmbeddedChannel(用于测试)。▶ BootstrapSwiftNIO 提供了一些 Bootstrap
对象,用于简化 Channel 的创建。有些 Bootstrap
对象还提供了其他的一些功能,比如支持 Happy Eyeballs。目前 SwiftNIO
提供了三种 Bootstrap:ServerBootstrap(用于监听
Channel),ClientBootstrap(用于 TCP Channel)和 DatagramBootstrap(用于
UDP Channel)。▶ ByteBufferSwiftNIO 提供了 ByteBuffer,一种快速的
Copy-On-Write 字节缓冲器,是大部分 SwiftNIO
应用程序的关键构建块。ByteBuffer
提供了很多有用的特性以及一些“钩子”,通过这些钩子,我们可以在“unsafe”的模式下使用
ByteBuffer。这种方式可以获得更好的性能,代价是应用程序有可能出现内存问题。在一般情况下,还是建议在安全模式下使用
ByteBuffer。▶ EventLoopPromise 和
EventLoopFuture并发代码和同步代码之间最主要的区别在于并非所有的动作都能够立即完成。例如,在向一个
Channel 写入数据时,EventLoop
有可能不会立即将数据冲刷到网络上。为此,SwiftNIO 提供了
EventLoopPromise和
EventLoopFuture,用于管理异步操作。EventLoopFuture实际上是一个容器,用于存放函数在未来某个时刻的返回值。每个
EventLoopFuture对象都有一个对应的
EventLoopPromise,用于存放实际的结果。只要 EventLoopPromise
执行成功,EventLoopFuture 也就完成了。通过轮询的方式检查 EventLoopFuture
是否完成是一种非常低效的方式,所以 EventLoopFuture
被设计成可以接收回调函数。也就是说,在有结果的时候回调函数会被执行。EventLoopFuture负责处理调度工作,确保回调函数是在最初创建
EventLoopPromise 的那个 EventLoop
上执行,所以就没有必要再针对回调函数做任何同步操作。4、SwiftNIO
的设计哲学SwiftNIO
的目标是要成为强大的网络应用程序开发框架,但并不想为所有的层次抽象提供完美的解决方案。SwiftNIO
主要专注在基本的 IO
原语和底层的协议实现上,将其他层次的抽象留给广大的社区去构建。SwiftNIO
将成为服务器端应用程序的构建块,但不一定就是应用程序直接拿来使用的框架。对性能有很高要求的应用程序可能会直接使用
SwiftNIO,减少上层抽象所带来的开销。SwiftNIO
可以帮助这些应用程序在提升性能的同时降低维护成本。SwiftNIO
还为某些场景提供了有用的抽象,高性能的网络服务器可以直接使用这些抽象。SwiftNIO
的核心仓库提供了一些非常重要的协议实现,比如
HTTP。不过,我们认为,大部分协议的实现应该要与底层的网络栈分开,因为它们的发布节奏是很不一样的。为此,我们鼓励社区自己去实现和维护他们的协议实现。实际上,SwiftNIO
提供的一些协议实现最初就是由社区开发的,比如 TLS 和
HTTP/2。5、相关资源源码托管:
文档:
SwiftNIO:聊天客户端:
客户端:
服务器端:
服务器:

摘要不知为何,总感觉 GitHub 成立不止 10 年了,你们有这种错觉么?本文是
GitHub 联合创始人兼 CEO:Chris Wanstrath
在计算机世界杂志写的文章。社区导读:不知为何,总感觉 GitHub 成立不止 10
年了,你们有这种错觉么?本文是 GitHub 联合创始人兼 CEO:Chris Wanstrath
在计算机世界杂志写的文章。当我们回顾 GitHub
过去十年,我们并不会想起某一款软件,而是想到人们用 GitHub
发生了何种改变。十年前,GitHub 正式上线。初衷何其简单:连接开发者,通过
Git
更好开展项目。过去十年,我们已经成为一家公司、一个平台,慢慢壮大,但是初衷从未变过。并不是一个好点子或者什么大事件让这个平台特别,而是使用它的人,感谢
GitHub
十年,感谢有你。当我们回顾过去十年,我们不会记得某一款软件,而是人们用
GitHub 做的事。全世界各地都可以用 GitHub
来分享、教授、修补、构建。在最初上线 GitHub
的时候,我们完全没有预料到它能成长如斯,如此大的体量,如此多的贡献和连接。展望未来,我们依旧会保持简单。未来在你的手中,由你来定义。我们愿意跟随你。与此同时,感谢你的代码,你的合并、你的文档,你共享的项目以及你在
GitHub 所做的一切。谢谢你,10
years。我们收集了这十年来的一些里程碑,今天在这个特别的日子,我们一起来回顾。并未下一个十年做准备。2008.4.10:GitHub
正式发布2008 年 4 月,我们的测试版结束,GitHub
推出了正式版,目的很简单:连接开发者,通过 Git
更容易的协同编程。2008.4.3:Rails 转移到 Git 和 GitHubRuby on Rails
是内测时的首批大开源项目之一,考虑到 GitHub 基于 Rails
建立,这是一个重要的时刻。2009.1.3:比特币的发明比特币于 2009
年被发明并在 2010 年发布到 GitHub。迄今为止此项目已有 18000+ 的
fork,500 merged pull request
作者,它启发了数以千计其他区块链的项目。2009.5.21:Node.js 启动Node.js
于 2009 年推出,导致人们使用 JavaScript 的方式发生根本性变化。借助
Node.js,开发人员可以使用 Angular,Ember,React,jQuery 和 Vue
等库和框架,在操作系统上构建复杂的服务器端和桌面应用程序。该项目有效地扩展了
JavaScript 的可能性,并成功推动了 JS。2010.11.26:Rails Girls
夏编程之夏第一次举办Rails Girls 于 2010 年在赫尔辛基举办了首次活动。2013
年,该团队开始了 Summer of Code 全球奖学金计划,除了 Google Summer of
Code,Outreachy 等,Rails Girls Summer of Code
对软件行业的产生了持久且积极的影响。2011.2.28:Travis CI 第一个 pull
requestTravis CI 是目前新兴的开源持续集成构建项目,它现已成为了 GItHub
的主要集成工具。2012.1.1:JavaScript 成为 GitHub 上最流行的语言在 2012
的开年,JavaScript 作为 GitHub 上最流行的语言,超越了 Ruby,Java 和
Python。今天它仍然是今天 GitHub 上最流行的语言。2013.1.16:GitHub
社区用户达到 300 万在 2013 年我们创建了第 1000 万个仓库。2014.6.9:
Docker 1.0 发布2014 年 6 月,Docker 1.0 推出,之后一年多,Docker
引入了企业数据中心和云。它和 Kubernetes 等项目简化了
DevOps,将团队从基础架构中解放出来,以便更专注于最重要的事情。2014.7.21:Django
Grils 第一次举办2014 年第一届 Django Girls
在柏林举办,开启了为期四年的世界各地软件培训和女性编程支持运动。2014.10.23:微软开源.
NET.NET 和. NET Foundation
只是微软开源计划的开始。现在该公司拥有数百个开源项目。其中包括去年拥有最多贡献者的
VS Code 和 2017 年发展最快的语言之一 TypeScript。微软也成为 GitHub
上最活跃的组织之一,数千名工程师,设计师和程序经理在平台和编程语言中贡献和发布软件。微软和谷歌等大公司对开源软件的重视,代表了他们对软件的态度。他们向我们表明,有时候重要的不是技术,而是社区以及人们如何使用技术。2015.3.2:虚幻引擎
4 源代码免费提供Epic Games 的团队发布了免费版本的「虚幻
4」引擎,这让创意与开发更更紧密连接在一起。免费的源代码允许访问主要功能。从错误修复到
Git 集成,他们的最新版本得到了 128 个 contribution
的帮助。由于开源游戏引擎,Game 成为了 2017 GitHub
最受欢迎的类目。Phaser,Godot Engine 和其他项目,如
Itch.io,正在塑造人们建立和分享独立游戏的方式。像 2048
这样的开源学习资源和游戏,激发了数百个
Clone,邀请了更多的人来玩和创造。2015.9.22:GitHub class 开课GitHub
Class
使教师更容易分发代码收集作业,今天,高中、大学、编程培训机构的学生们正在使用它来学习,现在有超过
180 万个 class 的库,但这也仅仅是 GitHub
教育资源的一部分。2015.12.3:Apple 开源 SwiftApple
这个决定提高了新开发工具的标准,并鼓励更多的公司发布开源。2016.7.9:阿波罗
11 代码开源阿波罗 11 号于 1969 年登月,四十七年后,它的启动源代码登录
GitHub,其中还包含了很多彩蛋,这也证明了 20 世纪 60
年代的程序员也有幽默感。NASA
维护者数百个开源项目,包括火星可视化地图,通过 TensorFlow
来识别系外行星的软件等等。你还可以找到 SpaceX
这些公司的开源项目。2017.2.10:Python 团队打开他们的第一个 pull
request在过去十年,Pyhon 已经成为增长最快的主要编程语言之一,自 2015
年来,它一直稳居 GitHub 语言前三。Python 的历史可以追溯到 20 世纪 90
年代,近年来因为数据科学和机器学习使它飞速发展。像 Pandas
这样广受欢迎的库,也让 Python 更流行。2017.2.15:TensorFlow 1.0
启动谷歌在 2015 年 将其内部机器学习库 TensorFlow 公开。去年,它是 GitHub
上最受欢迎的项目之一,TensorFlow 在 2017 年的访问量比 2016 年多 5.5
倍。现在,TensorFlow
是数据专业人员创建机器学习模型的首选工具。2017.5.2:30000 个
NGO(非营利组织)用户非营利组织通过技术产生了难以置信的积极影响。去年,30000
个非营利用户通过我们展开了 Human Utility,Maven 和 ConnectHome
等活动,让世界变得更美好。野生动物保护协会(WCS)的海洋保护涵盖 25
个国家,保护世界的珊瑚礁。在肯尼亚,WCS
使用软件收集全球研究人员的数据,并通过收集物种数据,监测超过 252
公顷的沿海礁石,这相当于 260
个足球场那么大。帮助当地更绿色生态地进行捕捞。2017.5.31:第 1 亿次 pull
request 被合并事实上,仅在 2017 一年,有 2.9
万亿行代码被提交。2018.4.10:十年的代码,协作和提交GitHub
正式推出十年后,我们的社区已经发展到全球拥有超过 8000 万个项目的 2700
万名开发人员。感谢您创建的存储库,感谢您的贡献以及您构建的软件。感谢你
10 年的代码。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图