2022年4月

在编译开源代码的同时在 Linux 上玩电子游戏。

 title=

我喜欢一款可以让自己沉浸数小时的好游戏,但我并不总是能够忽略工作而消失在电子游戏中。尽管如此,我还是喜欢不时的接受有趣的挑战,当我的计算机忙于做一些我需要等待的事情时,我最喜欢启动的两个应用程序是来自 KDE 游戏包的游戏:KBlocksKolf

KBlocks

我最喜欢的电子游戏是这种从方块从天上掉下来,最好是落成一排,当方块相邻时就会神奇的消失的游戏。KBlocks 就是这样的,它的实现很棒。它可以使用左箭头右箭头控制方块进行旋转,使用下箭头让方块更快的下落,使用空格键直接落下方块,不同的难度级别,方块下落的速度不同。

 title=

(Seth Kenlon, CC BY-SA 4.0

KBlocks 的默认主题是古埃及,这对游戏的玩法没有影响,但对于古埃及的爱好者来说可能是愉快的游戏体验。不过,你可以在“ 配置 KBlocks Configure KBlocks ”菜单项中更改主题。有一个名为 “Plasma” 的替代主题,或者你可以单击“ 获取新主题 Get New Themes ”按钮并下载由用户贡献的主题。

 title=

(Seth Kenlon, CC BY-SA 4.0)

主题纯粹是美学方面的事情,但就艺术类型的人而言,为休闲游戏创建主题可能是为开源项目作出贡献的一种有趣方式。

引导我进入 KDE Plasma 桌面的游戏

我承认,KBlocks 对我来说很难放下。事实上,正是我在会议期间玩游戏的愿望让我在 Emacs 中找到了 M-x tetris 命令,这反过来又让我发现并爱上了 Linux。这个游戏有很大的魅力。也许 KBlocks 将成为你发现 KDE Plasma 桌面的途径?

Kolf

我不喜欢现实生活中的高尔夫,但在电脑上,迷你高尔夫结合了模拟物理和有趣的关卡设计,既令人愉快,又令人沮丧。Kolf 的目标如你所料:将高尔夫球打入洞中。当然,目的地总是在拐角处、需要越过山丘、经过池塘或者在墙后,因此你的目标是计算球速、摩擦力、坡度和轨迹,使其完美地让球回到球洞并尽可能少的击打球。

 title=

(Seth Kenlon, CC BY-SA 4.0

它从来没有看起来那么简单,而且我认为看着高尔夫球从物体上反弹,并滚下你从未打算让它靠近的山丘,这永远不会过时。

设计自己的球场

当你尝试设计自己的迷你高尔夫球场时,乐趣才真正开始。是的,Kolf 有一个关卡编辑器,你可以在其中建造墙壁、放置池塘、山丘和沙坑,添加弹球式保险杠等等。

 title=

(Seth Kenlon, CC BY-SA 4.0

因为 Kolf 可以是多人游戏,所以给每个玩家五分钟的时间来设计一个关卡,然后看看谁在谁的关卡上做的最好,这特别有趣。

Linux KDE 游戏

这绝不是 KDE 项目中仅有的两款游戏。还有许多其它游戏,包括卡牌游戏、拼图游戏和街机游戏。KDE 游戏包的好处是,它们包含了你可以随时走开的游戏,而且它们只需要你一点点的注意力。我在编译代码时使用这些游戏来消磨时间。有时候我并不能完整的玩完一局游戏,但我总是很欣赏这种心理状态的微妙转变。


via: https://opensource.com/article/22/2/casual-gaming-linux-kde

作者:Seth Kenlon 选题:lujun9972 译者:perfiffer 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 2021 年 10 月,一个 Fedora Linux 用户 问了一个关于许可的问题。Fedora 项目负责人 Matthew Miller 回复道:“我不能快速地检查(这个问题),因为我们没有一个完整的、庞大的、可搜索的存储库来检索 Fedora 中所有软件包。”

接着他说:“……或许我们可以付钱给 Sourcegraph,让他们帮我们做这个。他们看起来乐于助人。” 他说的没错,我们(Sourcegraph)的确是乐于助人,而且我们还不想要你的钱,相反,我们想与 Fedora 社区合作。

Fedora 社区现在可以在他们的开源代码世界中尽情搜索 —— 目前有超过 34,000 个存储库,而且还在不断增加。

代码搜索简介

如果你还不熟悉 代码搜索 的概念,我现在就来告诉你。代码搜索可以让团队更快地掌握一个新的代码库,在里面找到答案,帮助团队识别安全风险,以及许多其他用例。Sourcegraph 已经在 GitHub 和 GitLab 等多个代码托管服务上,索引了 200 多万个存储库。本文只关注 src.fedoraproject.org 的代码搜索。Sourcegraph 同时提供了一个 Web 应用命令行客户端

使用 Web 应用

在使用 Sourcegraph Web 应用 时,你需要先输入初始字符串 repo:^src.fedoraprojects.org,然后再开始查询。这个 Web 应用 链接中包括了上面的初始字符串,点击这个链接后,搜索界面如下图所示:

Sourcegraph Web 应用界面

下面我将提供几个使用 Web 应用程序进行搜索的例子,大家可能会对它们感兴趣。

查找使用流行的经 OSI 批准的许可证的存储库

下面的查询语句将扫描所有兼容 “ 开源定义 Open Source Definition ”(OSD) 的软件存储库。

repo:^src.fedoraproject.org/ lang:"RPM Spec" License: ^.*apache|bsd|gpl|lgpl|mit|mpl|cddl|epl.*$

许可证搜索

试一下!

查找带有 TODO 的文件

下面的查询语句将在 34,000 多个仓库中找到 TODO 文件。对于那些希望为需要帮助的项目做出贡献的人来说,是一个非常棒的功能。

repo:^src.fedoraproject.org/ "TODO"

搜索 TODO

试一下!

查找 FTP 服务器上的文件

我的一个前同事告诉我 “FTP 是一个死协议”。真的是这样吗?你也可以在这个查询中加入任何其他协议,如 irc、https 等。

repo:^src.fedoraproject.org/ (?:ftp)://[A-Za-z0-9-]{0,63}(.[A-Za-z0-9-]{0,63})+(:d{1,4})?/*(/*[A-Za-z0-9-._]+/*)*(?.*)?(#.*)?

搜索协议

试一下!

查找使用有漏洞的 Log4j 版本的文件

这个查询语句将找到任何可能存在 CVE-2021-44228(也就是 Log4j)漏洞的文件(可能会有误报)。你也可以搜索其他漏洞,然后报告给项目维护者。

repo:^src.fedoraproject.org/ org.apache.logging.log4j 2.((0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15)(.[0-9]+)) count:all

搜索 log4j

试一下!

使用命令行

Sourcegraph 还有一个叫做 src 的命令行客户端,它可以让你完成我刚才提到的所有事情。此外,它还有其他一些有用的命令。比如说,它可以把结果用 JSON 格式输出,方便你在编程中使用。

src search -json 'repo:^src.fedoraproject.org/ lang:"RPM Spec" License: ^.*apache|bsd|gpl|lgpl|mit|mpl|cddl|epl.*$'

输出 JSON

输出 JSON

试一下!

搜索语法

就入门而言,上面的例子是很好的起点,但 Sourcegraph 还支持更多的查询语句。你可以 查看所有的搜索查询语法,并根据需要创建你自己的查询语句。

总结

正如你所看到的,有了 Sourcegraph,Fedora Linux 社区现在可以快速搜索托管在 src.fedoraproject.org 上的所有代码,无论是使用普通查询还是复杂的正则查询。

感谢 Fedora Linux 社区的慷慨帮助和热情欢迎。如果你有任何想补充的内容或问题,我和我的团队都会在下面的评论区回复。你也可以 在 Slack 上找到我们

特别感谢 Vanesa Ortiz 促成了这次合作,还有 Ben Venker 帮助修复了我的正则表达式(多次),以及 Rebecca DoddNick Moore 在编辑上的帮助。


via: https://fedoramagazine.org/using-sourcegraph-to-search-34000-fedora-repositories/

作者:Justin Dorfman 选题:lujun9972 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

你可能会遇到各种各样的工具来帮助你快速构建企业的应用。

然而,大多数值得信赖的选择往往是专有产品。因此,你将被锁定在他们的平台上,而对于你利用什么来构建的应用,没有足够的了解。

开源的解决方案应该是一个完美的替代品,让你安心,并对你的关键业务应用充满信心。

Budibase 就是这样一个令人印象深刻的解决方案。

Budibase:开源的低代码平台让事情变得简单

Budibase 是一个越来越受欢迎的开源低代码平台,可以帮助你为企业建立应用。

你可以从头开始创建应用,或者使用现有的模板来快速建立表单、机构-客户门户、汽车租赁管理面板、会计师门户、职位申请追踪器等等。

虽然它确实使事情变得简单,而不需要你有必要的编程技巧,但它也提供了一些控制,让你在一定程度上定制应用。

它支持一系列的数据源:MySQL、Rest API、OracleDB、MongoDB、Google 表格等。

你可以选择自我托管并在你的服务器上部署应用,或者利用 Budibase 的云托管服务。

Budibase 的特点

Budibase 提供了大部分的基本功能。让我在这里强调一下重要的功能:

  • 支持外部数据源,包括 MongoDB、MySQL 等。
  • 支持 Rest API 拉取数据。
  • 能够使用应用的内置数据库或上传 CSV 来导入数据。
  • 各种数据类型和功能,包括附件、关系、公式等。
  • API 整合平台,整合不同的 API,帮助你轻松建立内部应用、表单等。
  • 能够使用内部表格生成自动页面。
  • 构建单页应用。
  • 自动生成的 CRUD(创建、读取、更新和删除)页面
  • 私人和公共应用。
  • 只需点击几下就可以定制你的应用的主题。
  • 容易为你的应用实现深色模式主题。
  • 一个功能丰富的表单生成器,满足广泛的要求。
  • 支持 Webhook。
  • 与诸如 Zapier 等的第三方集成。
  • 基于特定触发器的灵活自动化选项。
  • 能够将 JavaScript 添加到你的自动程序中。
  • 为拥有自己基础设施的用户提供自我托管选项。
  • 免费的单点登录认证/管理。
  • 用户管理选项,将团队分配到不同的应用。
  • 支持 SMTP 电子邮件。
  • 电子邮件模板,以配合你的品牌和风格。
  • 支持 OAuth 登录。目前仅限于谷歌。
  • 图表、表格和卡片来优雅地展示数据。

总的来说,当你登录到该服务并查看其产品时,还有很多东西可以探索。

在我短暂的使用中,我发现用户界面很舒适,很容易使用。为了给你更多的认识,我在下面分享了更多关于使用 Budibase 的信息。

使用 Budibase 快速建立一个应用

在使用此类服务时,用户体验是首要因素。

Budibase 在这方面没有让你失望。当你开始使用 Budibase 时,你会得到一个很好的用户体验。

就我使用过的开源平台而言,用户体验并不总是强项。但是,在这种情况下,是用户体验使这个工具易于使用。

你可以迅速开始建立一个应用程序,添加你的源,并在几次点击中开始设计。

你可以选择内部数据库或选择外部源。该平台让你根据需要编辑/创建/导入数据。

而且,只需点击几下(取决于你应用的规模),你就可以开始设计屏幕和调整布局。

它完全是一个可视化编辑器,所以你会得到你所看到的东西。在布局中添加容器、分区、表单、卡片、图表和许多其他元素。

调整主题是一件轻而易举的事。因此,你可以根据你的要求,匹配你的品牌风格/样式,或者根据你的要求进行创意。

你可以轻松地编辑数据,创建新的数据字段,也可以为数据启用搜索索引。

不要忘了,你还可以获得所有的自动化选项,与其他服务集成,使用 Webhook、cron 任务或应用动作来响应触发器。这些是为你的用户建立一个最有效的应用的一些最重要的东西。

下面是我使用 Budibase 建立一个样本应用跟踪系统时的情况:

当然,你可以选择在你的服务器上发布应用,或者使用 Budibase 的云服务。

总结

Budibase 是一个非常有用的低代码平台,应该可以帮助个人和企业快速建立各种应用。你应该在其官方网站和 GitHub 页面上探索更多关于它的信息。

Budibase

它消除了聘请专家为各种用例构建应用的需要。而且,作为一个你可以自行托管的开源平台,它可以让你扩展并提供对构建应用的完全控制,而无需支付额外费用。

如果需要,你还可以选择其企业产品,提供高级支持和专门定制的服务。


via: https://itsfoss.com/budibase/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 5.18 再次尝试默认启用 -Werror

去年,在 Linux 5.15 中,内核尝试默认启用 -Werror,将所有编译器警告视为错误。其动机是为了确保编译器警告被开发人员认真对待,并让新代码不会引入任何新的警告。这一变化给 Linux 内核带来了很多构建时的痛苦,因此这次努力以失败而告终。在今天结束 Linux 5.18 合并窗口前,又送来了一批 “x86/紧急” 更新,其中默认启用了 Linux x86/x86\_64 上的 CONFIG\_WERROR 开关。

老王点评:想必经过了几个版本的准备,这次可能能够顺利执行下去。

微软开始通过 HTTPS 连接提供 Windows 更新

据消息,有人在试图下载微软 Windows 的一个更新时发现,更新文件包的 URL 从 HTTP 换成了 HTTPS。之前,用户可能遇到的一个问题是,他们无法再在浏览器中下载更新,因为微软只通过 HTTP 链接提供下载,而现代浏览器开始阻止 HTTP 下载链接,甚至微软自己的 Edge 浏览器最近也开始阻止从该公司的更新目录网站下载。

老王点评:这很令人意外,居然还一直在用 HTTP。

基于 Rust 的 Coreutils 实现发布新版本

据消息,Uutils 是一个基于 Rust 的 Coreutils 实现,它已经足够好,至少在基本功能方面 以及可以构成一个可工作的 Debian Linux 系统。上周末发布了一个新版本 0.0.13,为 cpdddfsplittr 等工具带来了许多改进,以及增加了不同工具支持的各种参数以提高 GNU 兼容性。

老王点评:期待看到 Rust 逐渐取代这些用 C 语言开发的基础工具,所带来的安全和性能改进。

这个看似简单的编辑器为用户提供了许多易于学习和使用的命令。

 title=

GNU ed 命令是一个行编辑器。它被认为是标准的 Unix 文本编辑器,因为它是首个出现在 Unix 的文本编辑器,并且它曾经无处不在,你在任何一个 POSIX 系统中都能找到它(通常来说,你现在也可以)。在某种程度上,你可以很容易看出来它是第一个文本编辑器,因为它在许多方面的功能都十分基础。和其他大多数的文本编辑器不同,它不会打开一个属于自己的窗口或显示区域,事实上,在默认情况下,它甚至不会提示用户输入文字。从另一个方面来说,它在交互功能上的缺失也可以成为一个优点。它是一个多功能的编辑器,你可以用简短的命令控制它,无论是在交互式的命令行中,还是在编写的 shell 脚本里。

安装 ed

如果你正在使用 Linux 或者 BSD 的话,你很可能已经默认安装了 ed(在 Linux 上是 GNU 版 ed,而在 BSD 上是 BSD 版 ed)。但是,一些极简的环境可能没有包括 ed,这也没关系,你的发行版的软件仓库中很可能有 ed 可供下载。macOS 默认安装了 BSD 版 ed

启动 ed

当你启动 ed 的时候,你的终端提示符不见了,看起来好像是 ed 停止运行了。其实它没有,它只是在等待你输入指令而已。

$ ed

为使 ed 显示更详细的信息,你可以输入命令 p 让它返回一个提示符:

$ ed
p
?

这个问号(?)是默认的 ed 提示符。

缓冲区

ed 激活时,你其实是在和一个叫 缓冲区 buffer 的东西打交道。缓冲区是内存中的一块区域。你并不会直接编辑文件,而是在编辑它对应的缓冲区。当你退出 ed 却没有把修改保存到磁盘的文件上时,所有的修改都会丢失,因为它们只在缓冲区里存在。(这对于一个已经习惯了初始的 草图缓冲区 scratch buffer 的资深 Emacs 用户可能很耳熟。)

使用 ed 输入文本

启动 ed 后,你处于命令模式。这意味着你可以向编辑器发送指令,比如让它显示一个提示符,而不是空白区域。你可以使用 a 命令开始附加文本到当前的缓冲区,使用一个实心的点 . 来终止输入。比如,下面的这个例子往缓冲区里附加了两行文字(“hello world” 和 “hello ed”):

?
a
hello world
hello ed
.

使用点 . 终止输入后,你将回到命令模式。

查看缓冲区

怎样查看当前缓冲区里都有什么呢?你可以输入想要查看的行号,也可以使用 ,p 命令来显示所有的行:

?
1
hello world
2
hello ed
,p
hello world
hello ed

写入文件

如果你现在对文本很满意,你可以使用 w 命令把缓冲区写入到文件中,后面跟上目标文件名:

?
w example.txt
19

写操作后显示的那个数字代表着写入到文件中的字符数。

读取文件

除了使用 ed 来读取文本,你也可以使用 r 命令把一个已经存在的文件加载到到缓冲区里:

?
r myfile.txt

另外,你也可以在启动 ed 时,在它后面加上你想要加载到缓冲区里的文件名:

$ ed myfile.txt

编辑缓冲区

鉴于 ed 是一个文本编辑器,你当然可以使用一种特殊的语法来编辑缓冲区里的文本。使用 sedvim 的用户或许会觉得这个语法很熟悉。假设现在缓冲区里已经加载了一个文件:

$ ed myfile.txt
,p
This is an example document.
There is some text, but not much.
There is some errors, but not much.

如果你要把第一句话中的 document 修改为 file,你可以先选择目标行(1),然后使用 s 命令调用搜索函数,后面跟着搜索文本和替换文本:

?
1
This is an example document.
s/document/file/
1
This is an example file.

如果你要编辑其他行,步骤也是一样的,只需提供一个不同的行号即可:

?
3
There is some errors, but not much.
s/is/are/
s/much/many/

你可以使用 ,p 命令来看到你对缓冲区的历史编辑记录:

This is an example file.
There is some text, but not much.
There are some errors, but not many.

当然,这些修改只存在于缓冲区里。你如果在 ed 编辑器外查看这个文件,你只会看到原始的文本:

$ cat myfile.txt
This is an example document.
There is some text, but not much.
There is some errors, but not much.

如果你要把这些修改保存回文件中,使用 w 命令即可:

w myfile.txt
258

清空缓冲区

如果想要得到一个新的缓冲区,以此来打开一个新的文件,或者把一个新的文件加载到不同的环境中,你可以使用 c 命令。使用这个清空缓冲区后,什么也不会输出,因为缓冲已经是空的了:

c
,p

退出

如果要退出当前的 ed 会话,你可以使用 q 命令。它并不会给你一个保存缓冲区的机会,所以你要确保自己在这之前执行了保存操作。

尝试一下 ed 吧

ed 还可以做到很多事情,学习 ed 可以让你知道它和部分的 vim 是如何工作的。我并没有尝试使用 ed 来写这篇文章,老实说,我也不认为它是通常意义上的最佳文本编辑器。但是,ed 仍然是一个出色的编辑器。通过阅读它的文档,你可以很轻松地学会它。在 GNU 系统上,你可以使用 info ed 来查看它的操作手册。


via: https://opensource.com/article/20/12/gnu-ed

作者:Seth Kenlon 选题:lujun9972 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

CyberDB,一个基于 Python 字典和列表的内存数据库。

概括

CyberDB 是一个轻量级的 Python 内存数据库。它旨在利用 Python 内置数据结构字典、列表作数据存储,通过 TCP 套接字高效通信,并提供了数据持久化。该数据库的亮点在于它使用了 Pythonic 的方式编程,你可以像使用字典和列表一样使用 CyberDB。

现在我们把 CyberDB 带到能发挥其作用的地方,在生产环境中将 CyberDB 作为 Flask 的内存数据库,使用 Gunicorn 运行,并实现多进程间的通信。

这篇文章通过一个尽可能精简的 Flask 实例讲解,不会涉及复杂的 Web 知识。核心思路为 CyberDB + Gunicorn + Gevent + Flask(多进程 + 协程),启动一个 CyberDB 服务器,使用 Gunicorn 多进程运行 Flask 实例,每个进程的实例通过 Gevent 运行,进程中使用 CyberDB 客户端连接至内存数据库,由此实现对 CyberDB 数据库的高并发访问。

源码解析

文章使用 PyPy 运行,同样适用 CPython。

运行环境: Debian 10, Python 3.8.12, PyPy 7.3.7

此项目的目录结构

.
├── app.py
├── cyberdb_init.py
├── cyberdb_serve.py
├── requirements.txt
└── venv

我们通过列举每个文件的内容顺序讲解 CyberDB 的核心操作。

文件 requirements.txt

CyberDB>=0.7.1
Flask==2.1.1
gevent==21.12.0
gunicorn==20.1.0

这是此项目的依赖。这篇文章不是 Python 基础教程,如果你不清楚,请查询相关文档创建虚拟环境 venv 目录并安装 requirements.txt 中的依赖。

生成 venv 目录并安装好依赖后,下面所有操作都在激活的虚拟环境中运行。

文件 cyberdb\_init.py

功能:初始化 CyberDB 的表结构,只在第一次运行时使用,后续不再使用。

import time

import cyberdb

db = cyberdb.Server()
# 配置 CyberDB 服务端的 地址、端口、密码。
db.start(host='127.0.0.1', port=9980, password='123456')

# 待服务端启动后,连接 CyberDB 服务端。
time.sleep(3)
client = cyberdb.connect(host='127.0.0.1', port=9980, password='123456')
# 生成 proxy 对象。
with client.get_proxy() as proxy:
    # 创建类型为 CyberDict 的表 centre,并初始化内容。
    proxy.create_cyberdict('centre')
    centre = proxy.get_cyberdict('centre')
    centre['content'] = 'Hello CyberDB!'

# 将 CyberDB 保存至 data.cdb 。
db.save_db('data.cdb')

在项目根目录执行

python cyberdb_init.py

以完成 CyberDB 数据库表的初始化。

它会在 CyberDB 中创建了一个名为 centre、类型为 CyberDict 的表;初始化 content 键的值为 Hello CyberDB!;最后将 CyberDB 数据库保存至硬盘(在项目根目录生成了名为 data.cdb 的文件)。

文件 cyberdb\_serve.py

功能:运行 CyberDB 服务端。

import cyberdb

def main():
    # 后台运行 CyberDB 服务端,设置相关信息。
    db = cyberdb.Server()
    # 从硬盘读取 data.cdb 至 CyberDB。
    db.load_db('data.cdb')
    # 每 300 秒备份一次数据库。
    db.set_backup('data.cdb', cycle=300)
    db.run(
        host='127.0.0.1', # TCP 运行地址
        port=9980, # TCP 监听端口
        password='hWjYvVdqRC', # 数据库连接密码
        max_con=10000, # 最大并发数
        encrypt=True, # 加密通信
        print_log=False # 不打印日志
    )


if __name__ == '__main__':
    main()

在项目根目录执行

python cyberdb_serve.py

以运行 CyberDB 服务端。

此处设置了 encrypt=True ,CyberDB 会将 TCP 通信内容使用 AES-256 算法加密。开启 encrypt=True 后,CyberDB 仅允许白名单中的 IP 通信,默认白名单为 ['127.0.0.1'](查看白名单 设置方法)。一般,若只需在本地进程间通信,无需开启 encrypt=True 和设置白名单,只有远程通信时需要此操作。

文件 app.py

功能:运行 Flask 实例和 CyberDB 客户端。

import cyberdb
from flask import Flask, g

# 连接 CyberDB 并生成客户端实例。
client = cyberdb.connect(
    host='127.0.0.1', 
    port=9980, 
    password='hWjYvVdqRC',
    # 服务端若加密,客户端必须加密,反之亦然。
    encrypt=True,
    # 每个连接若超过900秒无操作,将舍弃该连接。
    # 连接由连接池智能管理,无需关注细节。
    time_out=900
)

# 创建 Flask 实例,此部分请参考 
# Flask 文档 https://flask.palletsprojects.com/
app = Flask(__name__)

@app.before_request
def before_request():
    # 每次请求执行前生成 proxy 对象。
    g.proxy = client.get_proxy()
    # 从连接池获取连接。
    g.proxy.connect()

@app.get("/")
def hello_world():
    # 从数据库获取 centre 表。
    centre = g.proxy.get_cyberdict('centre')
    
    return {
        'code': 1,
        'content': centre['content']
    }

@app.teardown_request
def teardown_request(error):
    # 每次请求执行后归还连接至连接池。
    g.proxy.close()

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000)

该模块会在每次请求执行前(before_request())使用 client.get_proxy() 获取 proxy 对象,每个获取的 proxy 对象可以绑定一个 TCP 连接,此处使用 proxy.connect() 从连接池获取连接。视图函数 hello_world() 中,由 proxy 获取的对象 centre,与 proxy 共用同一个连接,proxy 的连接释放后,centre 也会失去连接。在每次请求后(teardown_request())使用 proxy.close() 方法释放 proxy 绑定的连接,归还至连接池。

cyberdb.connecttime_out 参数表示连接池中每个连接的超时时间,此处每个连接超过 900 秒无操作将被舍弃。若不设置该参数,连接池的每个连接会维持到失效为止。

使用 Gunicorn 运行 Flask 实例

Gunicorn 是一个用于 UNIX 的 Python WSGI HTTP 服务器,通常在生产环境使用,可以利用多核 CPU 。

Gevent 是一个基于协程的 Python 网络库。Gevent 会更改 CyberDB 客户端的底层套接字通信,使之支持协程。

在项目根目录运行

gunicorn -w 4 -b 127.0.0.1:8000 -k gevent app:app

使用 4 进程、Gevent 启动 Flask 实例。

浏览器访问 127.0.0.1:8000 ,得到如下响应:

{"code":1,"content":"Hello CyberDB!"}

参考信息

CyberDB 源码: https://github.com/Cyberbolt/CyberDB

总结

通过此例,你可以把 CyberDB 部署到更复杂的 Web 环境中,充分享受内存的低延迟特性。CyberDB 的核心是以 Pythonic 的方式编程,你可以在任何 Python 代码中将 CyberDB 作为内存数据库。


作者简介:

Cyberbolt:一个自由的 Python 开发者。


via: https://www.cyberlight.xyz/static/cyberdb-chn/tutorial/flask/

作者:Cyberbolt 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出