Friday, April 1, 2022

V2EX - 技术

V2EX - 技术


gRPC 跑分分享(2022 03 15 bench results)

Posted: 01 Apr 2022 04:57 AM PDT

直接贴来源: https://github.com/LesnyRumcajs/grpc_bench/wiki/2022-03-15-bench-results

总结:

  1. Rust 性能上天,资源利用高。
  2. CPP 不落王者
  3. Scala 机制优化
  4. Java 依然强悍
  5. Donet 有金主爸爸就是不一样
  6. Golang 名列前茅
  7. JavaScript 、PHP 、Ruby 洗洗睡了。

rancher 部署环境有什么要求吗

Posted: 01 Apr 2022 04:57 AM PDT

我有一台闲置的腾讯云服务器,配置是 1 核 2G ,重装了 ubuntu 系统,部署了 rancher 之后,UI 界面打开的时候特别慢,甚至打不开。 查看了下服务器的监控,CPU 直接达到 99.99%,rancher 对于服务器的要求这么高么?

求助: 大批量数据同时更新问题

Posted: 01 Apr 2022 04:57 AM PDT

情景

  • 数据量在百万左右
  • 需要保证用户看到最新的数据
  • 实时性要求高
  • 由于可配置规则的原因, 百万条数据的更新并不是同一规则, 即可能需要每一条或一批数据查到内存中单独计算
  • 计算完成后需要调用其他服务进行同步更新

暂时想到的方案

  • 提前计算, 例如 00:00 需要更新, 则 23:50 开始定时任务提前计算, 计算好的数据放在 redis 中, 00:00 开始由另一个定时任务告知程序从 redis 中读取最新值. 对 23:50 至 00:00 之间产生的脏数据进行 mark, 00:00 重新计算.
  • 00:00 定时任务, 某一节点从 redis 中读取 clean 的最新值并发送到 MQ, 其余所有节点接受消息并写库

球球各位大佬出出方案, 谢谢! Orz!

如果一个由多人维护的开源项目被商业公司收购,后续版本转向闭源,收购费用一般怎么分成?

Posted: 01 Apr 2022 04:53 AM PDT

全归项目创建者 /主要维护者吗?

找更好的笔记软件

Posted: 01 Apr 2022 04:52 AM PDT

大家笔记都是用的什么软件,有没有推荐,多端,付费也可,要支持 markdown 格式的,图片可以复制粘贴的

bear 挺好用,就是不支持表格,跟开发人员反馈也没有啥实际行动 onenote 又没有代码块,而且总感觉排版有 bug ,莫名其妙的文字大小不一样

我现在都是直接 MarkDown 放到 github ,但是手机和平板查看不方便,而且每次在公司更新完忘记 push ,家里电脑都看不到,而且图片还要单独放到资源文件夹,好麻烦

内存条本身可被植入后门吗?

Posted: 01 Apr 2022 04:51 AM PDT

中英文都谷歌过了,却未见实例甚至亦无假想(可谓一无所获),故特地问问神通博学的 V 友们。

也许能以某种体积小到无法察觉的外部设备(或者被裹嵌入内存条),这固然算作硬件"本身",但目前任何流水线都还没实现这么精密的先进技术吧?

话说回来,更关心当前的技术可行性乃至实例

此外也欢迎拓宽讨论范围至其他硬件类别(但对于纯处理器还是免了吧毕竟它这类的这种大新闻太常见了)。

"甲骨文严查 Java 许可数,企业连夜删除 JDK ",各位 Java 用户怎么看?....

Posted: 01 Apr 2022 04:44 AM PDT

https://www.sohu.com/a/534526996_121199210

根据境外媒体报道,为提高 JAVA 软件付费率,找出在不合规边缘徘徊甚至违法规定的客户,甲骨文公司在近日开始将 Java 纳入其软件许可审查中,以此来推动企业付费。据了解,这是业内提高付费率的惯用操作。

一加 9R + 氧 OS 的几个问题求教大家

Posted: 01 Apr 2022 04:39 AM PDT

刚换了 9R ,刷了氧 11 ,装了 magisk ,用起来还有几个问题没解决,请教下各位

1 、息屏时候抬起手机,是一个黑屏带时间的界面,想解锁手机要双击或者按电源键进入另一个带桌面的锁屏才行,感觉操作不方便,可以取消前一个么?

2 、桌面下滑是一个类似氢 OS 负一屏的界面,从顶部下滑才能滑出菜单,可以取消这个负一屏么?

3 、拨打电话、发短信,有没有好用的软件,原生不支持屏蔽垃圾短信。

4 、有没有通话录音? magisk 上面找了个 callrecorder-skvalex 略贵。

5 、有没有 NFC 模拟门禁卡的方法?

怎么在安卓上前置一个程序,不能切换到其他界面?类似于 IOS 的引导式访问

Posted: 01 Apr 2022 04:39 AM PDT

请教一下 如果使用固定程序的功能,的确可以固定在前端,但是可以按提示退出固定模式,容易被人退出 设置退出后需要密码也没有太大意义,因为退出还是可以退出,只是退出后立刻需要输入密码才能进入其他界面。 IOS 的引导式访问可以解决,但是我们希望尝试安卓。

MMO 万人同屏实验成功发布!

Posted: 01 Apr 2022 04:39 AM PDT

3DMMO 的万人同屏是一个让我激动不已的技术挑战!我是在 08 年关注到了 3DMMO 游戏服务器并行化的问题。并于同年就开始了一系列的技术尝试。软件工程和其他的工程一样。对于新的想法就是反复尝试,反复失败的过程。其实每个游戏服务器工程师都会开发一个自己的软件框架。一来容易维护二来使用方便。我只是比较幸运和执拗,喜欢用自己框架尝试新的想法。"念念不忘,必有回响",进过一系列的技术改进,终于实现了 3DMMO 的万人同屏。

luacluster 项目由两部分组成,服务器端的 luacluter 以及客户端的 uacluster_unity3d_demo 。虽然整合了 luajit, uvlib 等大量的第三方的开源库,但开发工作仍然非常的繁重。为了支持跨平台和兼容 unity 的坐标体系等,又做了很多非常复杂的实验。这个项目最大的难点在于,不能简单的把他归为分布式中的计算,存储或传输的任何一类问题。它是要在分布式的计算,存储和传输中寻找到一个恐怖的平衡点。

在 2020 年我个人曾连续写过 3 篇文章《使用 redis 实现 5 万人同服的"相位技术"》 《 3D 游戏的万人同屏技术详解(1)》 《 3D 游戏的万人同屏技术详解(2)》。这 3 篇文章围绕着一个核心问题。就是如何评估游戏服务器的性能?因为对游戏服务器性能评估的标准模糊,导致了现在游戏服务器技术开发方向的迷失。只有重新确立服务器性能评估标准,才能找回游戏服务器的技术方向。要评估服务器的性能,我们就要给出相应的标准。web 服务器有唯一的通用标准就是在线人数。也就是服务器的承载能力。在完成同样功能下,使用最少的硬件,承载能力越高越稳定的服务器,他的软件性能就越好。

但对于游戏服务器有着完全和 web 服务器不同的特点。无法使用简单的在线人数来衡量服务器性能。比如在 MMO 下虽然在同一个服务器内,但在不同地图的玩家之间,就几乎不会产生任何性能消耗。如果在极端情况下将每个玩家分别放入一个单独的地图。玩家之间不产生任何的互动。那么服务器的消耗将会非常的低。对应的服务器承载人数就会非常的高。但这种极端类型的服务器无法做出任何 MMO 游戏。所以在 MMO 下对服务器的评价标准,由最初的同服在线人数变为同地图在线人数。

可是随着无缝大地图技术的出现,这种同地图在线人数的评价标准又无法满足需求了。因为无缝大地图可以将任意整张地图分割为无数小地图。并将每个小地图分别放入不同的服务器。以提高整张大地图的承载能力。但这样的分割算法导致了新的问题。如果这些玩家集中到地图的某个点,服务器就不能正常工作!这就是说虽然整张地图可以承载的人数很高。但这种高承载能力只是一个障眼法。因为地图上某个区块的服务器会因为玩家的聚集而随机的崩溃掉。

虽然我们有无缝大地图的技术。但因为 AOI (游戏服务器内对象的可见范围)的承载能力很低。在整张大地图内导入过多的玩家会让服务器有崩溃的可能。最终使得服务器的承载能力受限于 AOI 的承载能力。从玩法上说可以在整张地图上导入很多玩家,但这些玩家之不能聚集在一起进行互动。使得整张地图承载能力的意义就非常小了。

所以对于 MMO 服务器的承载能力判定标准,也就由地图在线人数进一步变成了 AOI 内在线人数,也就是同屏的承载能力。这不是因为产品需求产生的技术路线。并不是因为某个产品需要万人同屏所以我们去研究万人同屏。而是因为我们解决了同服问题,解决了同地图问题,然后遇到了同屏问题。而同屏的问题又变的非常复杂。因为客户端在同屏上遇到了和服务器一样的技术瓶颈,导致在客户端上实现万人同屏也非常困难。客户端和服务器的问题互相纠缠,最终导致我们大多数人都迷失了。而我厌倦了这种对技术方向无休无止的争论。选择了以万人同屏为目标,重新梳理了全部技术栈,形成软件框架并最终使用云服务器完成了测试工作。

制约万人同屏的技术细节有那些呢?在服务器方面有如下几个问题:无法充分使用线程,异步场景和同步场景混乱,帧同步和状态同步混乱,对象的多个实体数据同步混乱等等。在客户端方面的问题:多线程通信技术不成熟,ECS 技术不成熟,渲染优化技术不成熟等等问题。我认为 MMO 万人同屏的实验成功是游戏软件领域重要的里程碑。将会解锁更多全新的游戏模式。

当前已经完成了所有基本测试工作,正在整合了 Mongodb 的数据库用于硬盘存储部分功能。接下来会开发增量存储以及传输加密等等功能。这将是一个长期的开发计划,期望最终实现一个通用的分布式 MMO 游戏开发框架。

行业内历年的数据摘要

1. 2013 年 bigworld 做过一次压力测试。在同一个地图上,使用 96 台(共 128 核心)服务器,可以承载 10 万个机器人。但每个机器人的 AOI 范围内有 62 个客户端。

2. 在 2019 年 kbengine 使用两台 8 核服务器,在同一个地图上可以承载 1 万人。AOI 范围内承载能力是 600 个客户端。

3. 在 2021 年通过进一步改造 kbengine, 实现了并行空间的技术,同样两台 8 核服务器,可以将 AOI 范围内承载能力提升到 1000 个客户端。

4. luacluter 使用 2 台 128 核服务器,将 AOI 范围内的承载能力提升到了 1 万个客户端。

开源项目地址

服务器开源地址: https://github.com/surparallel/luacluster

客户端开源地址: https://github.com/surparallel/luacluster_unity3d_demo

名词
1. AOI ( Area Of Interest ) 游戏服务器内对象的可见范围,即服务器内每个对象需要维护的可见和被见列表内对象的范围。当游戏对象发生移动时对应的列表需要增加或删除。维护列表的算法决定了游戏服务器的性能上限。
2. 无缝大地图( seamless maps )将一张超大的游戏地图按算法分割成多个小份,并分别由不同硬件服务器维护的算法。可以实现在一个超大地图上承载更多玩家。
3. 并行空间 将一个地图块同时创建到多个硬件服务器中,以提高单个地图块承载人数的上限的算法。
4. 万人同屏( Unity includes a 10,000 NPC scene ) 在同客户端屏幕内展现 1 万个游戏对象。对于游戏服务器是将 1 万个游戏对象放入 AOI 范围内。

原文链接: https://zhuanlan.zhihu.com/p/487028752

看纯英文技术文档速度慢。。你们怎么习惯的

Posted: 01 Apr 2022 04:36 AM PDT

水平也就个六级飘过,

看英文文档,做不到那种瞟一眼理解。还得在脑子里过一遍翻译。。遇到生词就要阻塞个几秒。。。

你们是怎么习惯的。。

频繁出现谷歌人机身份验证怎么解决?

Posted: 01 Apr 2022 04:15 AM PDT

最近每天都会弹这个提示,烦死了。 image.png

拼夕夕的便宜话费没有了

Posted: 01 Apr 2022 04:11 AM PDT

记得以前拼夕夕的话费是 80 多充一百的,现在已经找不到了,搜索关键词"移动话费充值",结果给我搜出一堆堆流量充值的,话费充值没多少,还一个个死贵的,那些以前 80 多或 90 多的的跑哪儿了?

PS:微信小程序拼夕夕的

求推荐 win 平台软件

Posted: 01 Apr 2022 04:04 AM PDT

看到了 https://v2ex.com/t/843789 帖子,macOS 推荐的软件真多啊...

大家在工作和娱乐上有什么觉得推荐的 win 平台的软件,欢迎留言

Stack Overflow 加了滤镜功能

Posted: 01 Apr 2022 03:54 AM PDT

3D 眼镜风格:

image.png

XP 风格:

image.png

官方博客介绍: https://stackoverflow.blog/2022/03/31/time-to-get-on-trend-filters/

sdkman 里 AdoptOpenJDK 已不存在

Posted: 01 Apr 2022 03:17 AM PDT

今天发现。AdoptOpenJDK 项目已经迁移到 Adoptium 上了 在 sdkman 上叫 Temurin 采用 Hotspot 构建,OpenJ9 构建由 Semeru 提供(ibm)

image

目前无界 16 装 Linux 效果怎么样?

Posted: 01 Apr 2022 03:00 AM PDT

i7-12700H 核显版,120Hz 。

未来打算用来装 Ubuntu Desktop 22.04 LTS

主要关注点在 PD 充电( C 口或者圆口诱骗)、无线、显示、外接显示器,有什么已知的坑吗?

或者目前有什么比它轻(<1.7kg )的 i7-12700H 的轻薄本吗?要求双内存插槽,可 PD 供电,可升级硬盘,最好双硬盘接口,最好没有独显。

感觉这几个月我看到的 12 代酷睿的笔记本都好重啊…

「野生架构师」周刊 #12 📸 Old But Good 、UNIX 艺术、互联网历史博物馆

Posted: 01 Apr 2022 02:52 AM PDT

我又来分享周刊了,朋友们,目前已经有 850+ 的订阅,我尝试在掘金上分享,但是对掘金这个平台太失望了,还是喜欢 V2EX 这里的交流氛围。

我的周刊并不以盈利为目的,主要是基于 Learn In Public 的出发点而创作,希望大家喜欢。


欢迎打开第 012 期「野生架构师」周刊,这是由  lcomplete 每周发送的 Newsletter ,本期的主题是「 Old But Good 」,同时也带大家一同回味 UNIX 的经典艺术。

cover

📝 本期话题:Old But Good

tweet by elon musk

本期话题由 Elon Musk 贡献 🤣,我特别喜欢这条推文,第一当下我们确实是生活在层层监控之下,第二电影《指环王》的这段剧情确实很感人,我当时看的时候也有些热泪盈眶,这段剧情的台词也非常励志,一起来感受一下。

山姆:这就像精彩的故事和伟大的事迹总是充满了黑暗和危险。

有时候你不想知道结局,因为哪里会有快乐结局?发生这么多可怕的事,这世界怎么回到从前?

但是可怕的黑暗和阴影终将消失,崭新的一天将会来临,太阳也会散发更明亮的光芒。

这才是让人永生难忘、意义非凡的故事,纵使你太年轻不明白为什么,但是我想我明白了,我现在明白了。

这些故事里的主角,有很多机会半途而废,但是他们并没有,他们决定勇往直前。

因为他们抱着一种信念,什么样的信念?

那就是——这世上一定存在着善良,值得我们奋战到底。

回想这段台词时,又想到了当今世界之现状,令我感触更深,但愿疫情和战争早日过去。

不管是电影还是技术,总是在推陈出新,Newsletter 也总是分享最新的时事、文章或工具,经典内容似乎有被遗忘的趋势,于是本期周刊着重分享那些历经时间考验的经典书籍和文章等内容。

🎼 UNIX 艺术

🎶《 UNIX 编程艺术》

这本书的作者是 Eric S. Raymond ,简称 ESR ,他有一句名言,「足够多的眼睛,就可让所有问题浮现」。他是 《大教堂与集市》《如何成为一名黑客》的作者,也是早期的开源运动领导者之一。

这本书着重讲解了 UNIX 的哲学、历史和设计,作为技术书籍中的瑰宝,其中的内容可谓是字字珠玑。

UNIX 哲学是这样的:一个程序只做一件事,并做好。从整体上,可以概括为以下几点:

  1. 模块原则:使用简洁的接口拼接简单的部件(封装性、紧凑性、正交性真理的单点性 / SPOT 原则)。
  2. 清晰原则:清晰胜于机巧。
  3. 组合原则:设计时考虑拼接和组合。
  4. 分离原则:策略同机制分离,接口同引擎分离。
  5. 简洁原则:设计要简洁,复杂度越低越好。
  6. 吝啬原则:除非没有办法,不要编写庞大的程序。
  7. 透明性原则:设计要可见,以便审查和调试。
  8. 健壮原则:健壮源于透明简洁
  9. 表示原则:将数据与逻辑分离,使逻辑质朴和健壮(单元测试很依赖这一点)。
  10. 通俗原则:避免标新立异(惯例优先)。
  11. 缄默原则:如果程序没什么好说的,就沉默(不要分散用户的注意力,只显示最有用的信息)。
  12. 补救原则:出现异常时,要给出足够的错误信息。
  13. 经济原则:宁花机器一分,不花程序员一秒。
  14. 生成原则:避免重复编码,尽量编写程序去生成程序。
  15. 优化原则:先求运行,再求正确,最后求快。
  16. 多样原则:多语言、开放的可扩展系统和用户定制机制。
  17. 扩展原则:设计着眼于未来。

🎵 Unix 哲学浓缩为一条铁律,那就是 K.I.S.S 原则——Keep It Simple ,Stupid !

作为 Coder ,其中很多原则我们都已经烂熟于心,有一些可能还没有领会的特别深刻,那就需要我们常读常新,比如:

1 、在生成原则上,只要我们不断思考,发现项目中重复的地方并消灭之,必然能使我们的生产力得到极大的解放。

在前后端开发协作上,最多的工作之一就是接口联调,那我们可以运用 生成原则 来优化工作流程,使用 OpenAPI Generator 或是其他工具来生成代码,有必要时编写自己的代码生成器。

当下的低代码热潮,本质上也是将生成原则发挥到极致——数据即代码。

2 、在模块原则上,UNIX 上的许多微型语言体现了紧凑性,如:正则表达式、awk 、Emacs Lisp 等,更具表达力的语言意味着程序更短,bug 更少,awk 极大地方便了文本处理;许多 LeetCode 问题,如果采用正则表达式能够极大地简化解法,甚至可以 用正则表达式来检查素数

这本书还引用了不少 《程序员修炼之道》 中的内容,后者是该书内容极好的补充,由 云风 于 2020 年才翻译了第二版,距离第一版已过 15 年,足见这本书的历久弥新,同时第二版的翻译也优秀许多。

相关文章:

📹 推荐记录片

1 、代码奔腾 Code Rush (2000)

这部纪录片讲的是网景公司在与微软的竞争中失败,最终将代码开源的故事。

虽然网景失败了,但本片的片尾词,至今仍然适用,仍然可以激励着互联网上的程序员们。

互联网也仍然继续发展着,进入到每个人日常生活的各个角落,而程序员军团和他们的代码也并肩前行,奔腾着,直到深夜。

We Are Coders ,今生无悔写代码。

2 、代码 The Code (2001)

Linus 、ESR 和 RMS 等对自由软件和开源运动有着卓越贡献的人「主演」的影片,也可以说是 Linux 的纪录片。

3 、操作系统革命 Revolution OS (2021)

「主演」仍然是 Linus 、ESR 和 RMS 等人,1999 年 Red Hat 在纳斯达克上市,Linux 那几年风头无两,这些领袖人物一年拍两部纪录片也就不奇怪了 🤣,这部影片中 ESR 的「戏份」比较多,还担任了开场大使。

《 The Code 》讲述的更多是 Linux 的历史,而这部影片则侧重讲建立 Linux 操作系统的斗士们是如何奋起反抗垄断的,正如本片片头,ESR 对轻蔑他的微软员工说到「 I'm your nightmare 」一样。

🗃 互联网历史博物馆

https://web.archive.org/ 是一个保存互联网档案的网站,于 1996 年创办,目前已经保存了 6690 亿个页面,它的目标是将互联网的历史档案给记录下来,在这里可以找到已经关闭的网站的历史存档,像我多年前上线过的网站也能够找到。

这是一个非营利性组织,主要依靠创始人 布鲁斯特·卡利 雄厚的财力支撑。

当我们打不开网站时,可以到这个网站时光机查找存档,它提供了一个插件 Wayback Machine,可以存档网站或者从打不开的页面快速跳转到「时光机」。

🤣 轻松一刻

为什么程序员喜欢 UNIX?

unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep


Util next week,

lcomplete


如果你觉得写的还不错的话,欢迎关注和订阅。

  • 🐦 我的 Twitter ,及时获取高质量分享:野生架构师 🐒
  • 📧 我的 Newsletter ,每周一篇:野生架构师,它分享简短实用的效率方法 🪄、优质文章 📑、编程知识 🎹、实用工具 🛠️ 等,感谢你的阅读!

求问大佬们 UI 框架技术选型

Posted: 01 Apr 2022 01:53 AM PDT

工业软件,后台集中监测,集中控制,包含众多管理功能,需要接百度地图 api ,vue 和 react 分别用哪种 UI 框架好

吐槽一下最新一期《科技爱好者周刊》(201 期)中引用的一句话

Posted: 01 Apr 2022 01:43 AM PDT

整个自由软件社区,弥漫着一种不信任的气氛:不信任大公司,不信任 ZF ,不信任专有软件。 这些不信任的根源在于,自由软件社区不信任集中化,更喜欢去中心的设计。-- 《去中心化的迷思》

http://www.ruanyifeng.com/blog/2022/04/weekly-issue-201.html

在 2022 年看这句话就觉得很讽刺。

事实上前段时间的两起 NPM 库的事件恰恰说明自由软件社区也不值得信任,甚至比大公司更不值得信任。

大公司有 PR 的负担,很多第三方库都是由个人维护,并不需要为自己的行为付多大责任。

这个时代又要回到 C++程序员的信条:只有自己写的代码最可靠(重复造轮子)。

Q05NIOeahCBTQiDml7bku6M=

cve-2022-22965(spring core rce 漏洞)造成的影响可能没有想象中大?

Posted: 01 Apr 2022 01:01 AM PDT

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

https://tanzu.vmware.com/security/cve-2022-22965

Vulnerability The vulnerability impacts Spring MVC and Spring WebFlux applications running on JDK 9+. The specific exploit requires the application to run on Tomcat as a WAR deployment. If the application is deployed as a Spring Boot executable jar, i.e. the default, it is not vulnerable to the exploit. However, the nature of the vulnerability is more general, and there may be other ways to exploit it.

Am I Impacted? These are the requirements for the specific scenario from the report:

JDK 9 or higher Apache Tomcat as the Servlet container Packaged as a traditional WAR (in contrast to a Spring Boot executable jar) spring-webmvc or spring-webflux dependency Spring Framework versions 5.3.0 to 5.3.17, 5.2.0 to 5.2.19, and older versions However, the nature of the vulnerability is more general, and there may be other ways to exploit it that have not been reported yet.


需要打包成 war + jdk9+版本才会触发漏洞

新项目一般都是 jar 打包,老项目一般不用 jdk9+,是不是这个道理?

Google 为什么 pixel 取消了面部识别 soli 雷达

Posted: 01 Apr 2022 12:20 AM PDT

Google 从 pixel4 上使用类似苹果的面容识别。但是只用一代。puxek5 就取消了。有大佬知道为什么吗?想收个二手玩玩

StackOverflow 今天的愚人节玩笑不错

Posted: 01 Apr 2022 12:12 AM PDT

可以换多种不同的主题,比如 tiktok facebook 等

手机一直发送 gvt1.com 这样的包是什么情况, 有人知道吗?

Posted: 31 Mar 2022 11:57 PM PDT

GET http://redirector.gvt1.com/edgedl/release2/chrome_component/eezwg7434p43ef7k4izoedfcqi_102.0.4977.0/jamhcnnkihinmdlkakkaopbjbbcngflc_102.0.4977.0_all_acvo5qlrlwpygv44lwpq26jdmdja.crx3 HTTP/1.1 Proxy-Connection: Keep-Alive Accept: / Accept-Encoding: identity If-Unmodified-Since: Fri, 01 Apr 2022 04:50:06 GMT Range: bytes=149798-150201 User-Agent: Microsoft BITS/7.8 Host: redirector.gvt1.com

大量很多的, 一直不停的发

CloudFlare 的存在可以大大降低写爬虫进监狱的风险

Posted: 31 Mar 2022 11:48 PM PDT

五秒盾一出,干活可真难……

手机想投屏 到 ubuntu 20.04 来个老哥指点一下?

Posted: 31 Mar 2022 10:41 PM PDT

1. 软件最好轻量级一点

Windows 11 记事本闪退有类似的吗

Posted: 31 Mar 2022 10:37 PM PDT

系统版本:Windows Feature Experience Pack 1000.22581.100.0

  1. 输入任意内容,然后进行搜索,记事本直接闪退。
  2. 行数超过 30 之后,回车换行导致闪退

目前发现搜索闪退的解决方案:首行空白即可大概率解决搜索闪退。

猜测:记事本搜索功能会导致页面下沉,这个地方可能存在 bug ?甚至猜测可能和语言有关,因为没看到在英文下有类似的反馈。

其他人的情况怎么样呢。我这边已经遇到很久了(数月),以为巨硬会解决,结果一直没有,今天提交了反馈,估计应该也不会改进。

哪里有好看的 Qt QML Style 分享?

Posted: 31 Mar 2022 10:19 PM PDT

自带的 Imagine Universal 都不是很好看,尤其是 Material ,简直丑出新高度。
大家有收藏什么好看的 Qt QML Style 可以分享一下么?或者哪里可以找到好看的 Qt QML Style ?

(比较喜欢 Telegram 桌面客户端那种设计风格的,但 Telegram 好像用的是 Qt Widget ,没法直接提取。
当然如果有更好看的也可以)

一款好用的开源 UI 自动化测试框架 --- 口语化做 Android、iOS 测试

Posted: 31 Mar 2022 10:05 PM PDT

背景

携程机票从 2018 年年中正式引入 BDD ,至今已 3 年多,成为内部首选的敏捷开发技术。

Flybirds 是一套基于 BDD 模式的前端 UI 自动化测试框架,提供了一系列开箱即用的工具和完善的文档,现在逐步稳定,成为机票内部首选的 BDD-UI-Testing 测试框架。

为什么开源

  • 分享我们的 BDD 技术方案
  • 期待业内使用 BDD 技术的同行通过开源社区与我们进行更深入的交流

本文将从特性介绍、环境搭建、使用帮助、自定义扩展、持续集成、发版计划这几个方面对框架进行介绍。

Flybirds

  • 基于 Behave ,实现 BDD 中"自然语言测试用例文档"和"自动化测试代码"关联需要用到支持 BDD 工具。
  • 基于 Airtest ,实现 BDD 中"测试用例能在自动化测试平台上执行"需要用到 UI 自动化测试框架。
  • 基于 Multiple-cucumber-html-reporter ,实现可视化的测试报告

architecture

特性

使用Flybirds你能够完成大部分的手机端自动化操作,以下是一些帮助入门的特性描述:

  • 基于 BDD 模式,类自然语言语法
  • 支持自动化 APP 操作、表单提交、UI 元素校验、键盘输入、Deeplink 跳转等
  • 默认支持英文、中文两种语言,支持更多语言扩展
  • 插件式设计,支持用户自定义自动化扩展
  • 提供 cli 脚手架,快速搭建项目
  • 提供 html 报告

环境搭建

  1. 使用pip安装 flybirds 框架,过程中会自动安装所需的 依赖包
pip3 install flybirds 

在 Mac/Linux 系统下,需要手动赋予 adb 可执行权限

  • for mac
cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac chmod +x adb 
  • for linux
cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux chmod +x adb 
  1. 使用脚手架创建项目
flybirds create  

clicreate

快速上手

运行演示

为了帮助使用,项目创建时,会生成中英文的 Android 、iOS 演示 feature ,方便用户参考。

features/test/ features/test/android features/test/android/cn/everything.feature features/test/android/en/everything.feature features/test/ios features/test/ios/cn/everything.feature features/test/ios/en/everything.feature 

以"Android"为例

  1. 执行命令 adb devices , 检查设备列表中是否包含测试设备
  2. 开始运行
cd {PATH_TO_PROJECT_FOLDER} flybirds run -P features/test/android 

框架会通过flybirds_config中配置的packagePath自动下载测试包并安装(请确保手机已经打开"允许安装未知来源" )
运行结果如下

11 features passed, 0 failed, 0 skipped, 0 untested 23 scenarios passed, 0 failed, 0 skipped, 0 untested 117 steps passed, 0 failed, 0 skipped, 0 undefined, 0 untested Took 5m21.300s =====================================================================================     Multiple Cucumber HTML report generated in:      /Users/test/my_first_project/report/7eb9162a-9d42-4fde-a5d7-d8d4bca7a8d8/index.html ===================================================================================== 

接下来,了解下更多项目细节

项目结构

  • config:配置文件
  • features:测试用例 feature 文件
  • pscript:自定义扩展
  • report:测试报告

features 目录

基础目录结构如下

  • test:存放 feature 文件,这些文件使用自然语言编写,最好由软件项目中的非技术业务、产品人员参与者编写。
  • steps:存放场景中使用的 step 语句实现,"steps.py"中加载了所有的 step 语句模版
features/ features/test/ features/test/everything.feature features/steps/ features/steps/steps.py 

复杂些的目录结构参考如下

features/ features/test/ features/test/list.feature features/test/buy.feature features/test/detail.feature features/steps/ features/steps/steps.py 

feature 文件

feature 文件包含用户动作,行为特征描述及预期结果的文本,行为特征部分使用 Gherkin 语言编写。

feature 文件,也称为功能文件,有两个目的:文档和自动化测试。

以关键字开头("功能"、"场景"、"场景大纲"、"当"、"而且"、"那么"……), 文件中的任何位置都允许使用注释行。

功能(Feature) 是被测试功能的一些合理的描述性标题,由场景组成。他们可以选择有一个描述、一个背景和一组标签。

背景(Background) 由一系列类似于场景的步骤组成。它允许您向功能的场景添加一些上下文。在此功能的每个场景之前执行。

场景(Senario) 标题应该是被测试场景的合理描述性标题,由一系列给定条件的步骤组成

场景大纲(Senario Outline) 包含功能的详细描述,可以有一组预期条件和结果来配合您的场景步骤

以下是中文 feature 例子 featureCN

以下是英文 feature 例子 feature_en

step 语句模板

以下列出了部分模版 | 更多模版查阅

语句模板 语义
跳转到 [] 跳转到指定的 url 地址
等待 [] 秒 等待一段时间
页面渲染完成出现元素 [] 进入新的页面时检查指定元素是否渲染完成
点击 [] 点击指定属性的元素
在 [] 中输入 [] 在指定选择器中输入字符串
向 [] 查找 [] 的元素 向指定方向查找指定属性的元素
全屏向 [] 滑动 [] 全屏向指定方向滑动指定距离
存在 [] 的文案 检查页面中存在指定的字符串
存在 [] 的元素 检查页面中存在指定属性的元素
元素 [] 消失 检查页面中指定属性的元素在指定时间内消失
全屏截图 保存当前屏幕图像
开始录屏 开始录制视频
结束录屏 结束录制视频
安装 APP [] 安装 APP
启动 APP [] 启动 APP
----- -----

Hooks

用户可在以下文件中定义 hooks

pscript/dsl/step/hook.py 
  • before_step(context, step), after_step(context, step)

    在每个步骤(step)之前和之后运行

  • before_scenario(context, scenario), after_scenario(context, scenario)

    在每个场景(senario)之前和之后运行

  • before_feature(context, feature), after_feature(context, feature)

    在每个功能文件(feature)之前和之后运行

  • before_tag(context, tag), after_tag(context, tag)

    在用给定名称标记(tag)的部分之前和之后运行

  • before_all(context), after_all(context)

    在所有执行之前和之后运行

标签(Tags)

可以使用 tag 标记不同的场景,方便有选择性的运行。

下面是一个例子 tag

运行有特定 tag 的场景,多个用逗号隔开

flybirds run -T tag1,tag2 

'-'开头表示运行不包含某 tag 的场景

flybirds run -T -tag 

运行前检查

  1. 请确保配置的测试设备能够正常连接

    • Android: 执行命令 adb devices , 检查设备列表中是否包含测试设备
    • iOS:以tidevice库举例,执行命令 tidevice list,检查设备列表中是否包含测试设备

    Android 设备连接 Q&A

    • 请先安装手机对应品牌的官方驱动,确保能使用电脑对手机进行 USB 调试
    • 确保已经打开了手机中的"开发者选项",并且打开"开发者选项"内的"允许 USB 调试"
    • 部分手机需要打开"允许模拟位置"、"允许通过 USB 安装应用"
    • 关闭电脑上已经安装的手机助手软件,能避免绝大多数问题,请务必在任务管理器中手工结束手机助手进程

    iOS 设备连接 Q&A

    • 请先准备一台 macOS ,使用 xcode 部署 iOS-Tagent 成功后,能够在 mac 或 windows 机器上连接到 iOS 手机。请点击链接下载项目代码到本地进行部署。
    • mac 环境通过 Homebrew 安装 iproxy brew install libimobiledevice
    • windows 环境安装itunes
  2. 下载安装测试包

    • Android:框架会通过config中配置的packagePath自动下载测试包并安装(请确保手机已经打开"允许安装未知来源" )。也可手动下载安装:下载地址
    • iOS:
      1. 请手动下载演示 APP 进行安装:下载地址
      2. 开启 wdaproxy: shell tidevice --udid $udid wdaproxy -B $web_driver_angnt_bundle_id -p $port

运行参数

在终端输入以下内容来查看flybirds运行项目时支持的操作

flybirds run --help 
  • run

    执行 features 目录下所有的 feature 文件

  • --path, -P

    指定需要执行的 feature 集合,可以是目录,也可以指定到具体 feature 文件,默认是 'features' 目录.

    示例:

    flybirds run -P ./features/test/demo.feature 
  • --tag, -T

    运行有特定 tag 的场景,多个用逗号隔开,'-'开头表示不运行包含此 tag 的场景

    flybirds run -T tag1,tag2,-tag3,tag4 
  • --format, -F

    指定生成测试结果的格式,默认是 json.

    示例:

    #默认 flybirds run --format=json 

配置参数

提供了丰富的配置项 | 帮助文档

必须配置项:deviceId packageName 。

连接 IOS 设备时,需要额外配置 webDriverAgent 、platform 。

image

报告(report)

报告包含汇总 Summary 和功能(feature)、场景(senario)的执行结果,对于失败的场景(senario),报告中会展示当时的屏幕图像和视频, 下面是一个例子。 report

自定义 step 语句模板

在编写 Feature 的过程中,可能会遇到提供的公共语句不能满足自身项目的需求,需要自定义语句。比如:需要对接某个内部工具 API ,此时需要用到自定义语句功能。

自定义语句功能会用到 python ,如果你不了解这门编程语言,也不必要太担心,因为只会使用到最基础的 python 语法,这并不会太难。

使用方法

  1. 进入项目目录"psscript/dsl/steps"
  2. 新建.py 文件来编写自定义语句
  3. 在 feature/steps/steps.py 中 import 该.py 文件

示例代码如下 dsl_extend

对于团队内部通用的自定义功能,可以考虑创建一个 extend package ,flybirds 支持动态加载,package 命名包含"-flybirds-plugin"即可。

自定义框架扩展

理论上 BDD-UI-Testing 可以适用在所有端,比如:APP 、Web 、小程序。

框架的插件式设计模式,保留了良好的扩展,当前版本只开放了 APP 端支持,未来会逐步开放更多,下面是两个例子供大家参考。

增加 web 端扩展

  1. plugins.default下添加自己的 web 包
  2. 添加 web 对应的实现。比如page.py,element.py,如果需要增加其他的插件实现类,只需要在GlobalContext类中添加对应的名称。
  3. plugin.event下添加自己的 web 包。
  4. event.web包下重写或者新增类,比如重写run事件可以在plugin.event.web下面添加"run.py",具体实现逻辑可参照已有的run.py
  5. 在项目配置文件"flybirdes_config.json"配置 device_info.platform值为"web"。

修改当前 APP 端扩展

  • 可通过配置"plugin_info.json"对已有的 plugins 进行修改(只支持修改不支持新增),比如你希望对 plugins 下面ios.app进行修改:
    1. 可以在本地创建一个自己 app.py
    2. 在 plugin_info.json 对应平台中添加如下配置:
       "app": {       "path": "{local_path}/app.py",       "ns": "app.plugin"     } 

    {local_path} 为本地路径,"ns"为包名,注意包名的唯一性

其他语种支持

flybirds 可以支持 40 几种语言,在以下文件中增加公共方法的语言配置即可。

flybirds/core/dsl/globalization/i18n.py 

示例代码如下 lang

持续集成

cli 提供的命令行执行模式,可以非常方便加入各种持续集成工具.

以 Jenkins 为例:

# Inside the jenkins shell command cd {PATH_TO_PROJECT_FOLDER} # Run flybirds run -P ./features/test/everything.feature cp -R reports $WORKSPACE 

发版计划

我们将按照 SemVer 版本控制规范进行发版。逐步新增功能和代码优化,非常欢迎您加入到我们的共建计划中,在 GitHub 上提出您的宝贵建议,以及在使用时遇到的一切问题,我们也会对此每周进行一次小版本的迭代。您也可以在这里给我们精神支持。给仓库点上一颗 Star

寻找一个 Java 应用本地更新方案

Posted: 31 Mar 2022 09:53 PM PDT

公司采用工控机整机交付客户。机器上运行 jar 包+Mysql 数据库+web 应用。机器能访问外网。 如何更新这些应用? 目前考虑采用 shell 更新。更新 jar->更新数据库结构->启用 jar->更新 web 。 但是万一 jar 更新失败或者启动失败,需要回滚数据库及 web 。也无法保证回滚成功。 对这种问题,市面上有什么现成的解决方案吗?

面试题: C++怎么实现热更新内存数据?

Posted: 31 Mar 2022 08:42 PM PDT

c++服务端初始化阶段会将某二进制文件load 到内存中,每次请求都会访问该内存数据,c++服务端有持续请求,现在该二进制文件更新了,如何将该二进制文件热更新到内存中且不影响线上请求?内存空间足够

写了个语雀搜索的 Chrome 插件

Posted: 31 Mar 2022 08:41 PM PDT

这两天写了个语雀搜索的 Chrome 插件,欢迎各位语雀大佬使用

项目地址:https://github.com/yezige/yuque-search

心情好别忘了给个 Star

插件截图:

预览 3 预览 2 预览 1

Everthing 如何在文件夹中导航

Posted: 31 Mar 2022 08:25 PM PDT

文件导航非常有用的一点是,当我知道某个文件在某个目录下,但又不知道文件名的时候非常有用。再就是我想简单浏览一下指定目录下有什么东西,比如 download 目录下是否有我刚刚下载的东西。

在 MacOS 中我可以用 Alfred 中轻松做到这一点,比如我在 dropbox 中有个 javabooks 的目录有很多 java 的书,当我想不起某本书书名的时候我可以先搜索 javabooks 然后进入此目录(此处并不是打开文件浏览器,而是在 Alfred 界面中),就可以找到我想要打开的书。并且我可以在上下级目录中跳转。我不知道 Everything 是否有这个功能,或者有其他更方便的软件可以做这件事。

异步任务状态机有啥好的解决方案吗?

Posted: 31 Mar 2022 08:19 PM PDT

rt

背景:删除耗时的资源,状态机有:删除中,删除成功,删除失败。(创建功能一样,就是创建中,创建成功、创建失败)

api 调用时,前端可以发起批量动作,例如批量删除耗时资源。我的流程就是数据库批量数据更新为删除中,然后起多个线程去异步调用真实的耗时接口。直接返回前端操作成功。异步完成后会更新数据库状态为删除成功

异常处理: 由于都是在内存中,如果服务重启,即无法知道结果。目前解决方案是每次启动之前都捞出"XX 中"的状态任务,先调查询结果接口,进行数据库更新,或者重新发起。

疑问: 目前有很多这种异步耗时又有状态的资源。我想着给他们抽象出来做成统一,有啥方案或者目前有什么开源的任务调度能解决状态机的东西吗?

有没有实际开发编程能力很强,但是不擅长面试的同学?

Posted: 31 Mar 2022 07:31 PM PDT

自己从高中开始自学计算机,接触过很多东西。

大学期间自己在实际开发中也受到过老师的赞同,实习时候也被主管很认可。但是就是面试不太行,老是忘记八股文,也不太会刷题。

感觉以后得针对性八股文和算法。

EmacsTalk 第十一期. 与架构师 redraiment 闲聊 Emacs

Posted: 31 Mar 2022 06:21 PM PDT

概要

本期嘉宾是使用十二年的 Emacs 资深用户张泽鹏(网络 ID:redraiment )。得益于 Emacs 其无与伦比的"开放性",嘉宾使用它打造出符合自己理念的高效开发环境。Emacs 对于嘉宾来说,即使生产力工具,也是"玩具",在"玩"的过程中,来学习新技能。使用 Emacs 多年后,万物可编辑的思维给嘉宾的日常工作带来很多启发,总结出一篇与系统设计的文章:编辑器思维与系统设计思想,这其中的精华都会在节目中聊到,近一个小时的节目,精彩不容错过。

收听方式

https://emacstalk.github.io/podcast/011/

s3 查询问题,如何精确查询?

Posted: 31 Mar 2022 06:06 PM PDT

各位,我想通过通配符或正则来查询 s3 上的对象,但是使用 bucket.objects.filiter()方法只能用前缀来指定查找,这样不能达到效果,有没有好的方法来实现更精确的查找?感谢

请问下各位同学,有购买精装房的没,收楼了怎么去验收?

Posted: 31 Mar 2022 05:45 PM PDT

请问下各位同学,有购买精装房的没,收楼了怎么去验收?

有买上坤地产房子筒子们最好,交流哈,多谢!

求问 PPT 文件上传后如何在 WEB 端直接打开查看,不下载!

Posted: 31 Mar 2022 03:30 PM PDT

PHP 的后台,VUE 的前端,在后台上传 doc\ppt\pdf 的文件,问题是"目前只解决了 PDF 的新标签页打开的问题,但是 DOC 和 PPT 前端 WEB 点击只能下载,不能直接再标签页内直接打开吗?" 跪求大神指点迷津~

求教转发本地应用网络请求的方法

Posted: 31 Mar 2022 03:10 PM PDT

程序目标

用本地服务代替网络服务, 使得需要依赖网络运行的一款第三方应用能够脱机运行。

已实现的阶段目标

使用 RESTful 架构的 falcon 包实现了基本的网络请求响应,在依赖的资源文件完整的情况下,程序可以脱机运行。 但是遇到资源文件缺失,需要通过网络下载补足的情况就会报错。

问题描述

本地文件请求:GET http://127.0.0.1:8686/Download/example.zip

文件远程真实地址:GET http://down.domain.com/Download/example.zip

用什么方法能在 python 程序接收到本地文件请求时,由 python重定向连接到文件远程真实地址,并将响应数据原样发回给本地第三方应用。类似于本地应用通过代理的方式取得了文件。

用关键词redirect在 Github 搜索了一些 python 项目,没找到特别适用的。

希望大侠不吝赐教,万分感谢。

Java ssh 客户端 Jsch 怎么执行 sudo su 后再执行新命令

Posted: 31 Mar 2022 01:51 PM PDT

背景是这样的。

我在本地通过 jsch 对一台远程机器执行命令,但该命令需 sudo 权限。

远程用户,只开放了登录用户的 sudo su 的权限。

导致想执行 sudo 命令需分两步:

sudo su - docker ps 

这里涉及到 session 切换,原生的 Jsch 的 ExecChannel 就用不了。

改为 ChannelShell 。

ChannelShell channel = (ChannelShell) session.openChannel("shell");  OutputStream os = channel.getOutputStream();  os.write(("sudo su - \r").getBytes()); os.flush(); os.write(("docker ps \r").getBytes()); os.flush(); os.write(("exit \r".getBytes()); os.flush(); os.write(("exit \r").getBytes()); os.flush(); 

但这个命令的返回,是一堆 shell 命令和结果糅合在一起,比较难提取真正的结果。

sudo su - docker ps exit exit 20:51:19  demo@host-a.b.c:~   $ sudo su - 20:51:19  root@host-a.b.c:~   # docker ps CONTAINER ID   IMAGE                                                COMMAND                  CREATED        STATUS        PORTS     NAMES 2a3da88c5f8b   ca6e5bfba5a5                                         "/usr/bin/tini -- /u…"   3 days ago     Up 3 days               docker_job_xxx 20:51:19  root@host-a.b.c:~   # exit logout 20:51:19  demo@host-a.b.c:~   $ exit logout 

而且如果远程机器换一个 os ,例如是 centos ,则:

Last login: Thu Mar 31 20:27:32 2022 from 192.168.1.2  sudo su - docker ps exit exit [demo@host-e.f.g ~]$ sudo su - Last login: Thu Mar 31 14:17:40 CST 2022 on pts/3 [root@host-e.f.g ~]# docker ps CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 8929e8f93280        img_xxx     "/usr/sbin/init"    5 months ago        Up 5 months                             docker_job_yyy [root@host-e.f.g ~]# exit logout [demo@host-e.f.g ~]$ exit logout 

不同系统或者 terminal 可能会返回格式不同,导致真正想要的结果难以提取。

请教是否有好的解决方法呢?

文档:

http://www.jcraft.com/jsch/

Java 语言代码实现一个最优写法。

Posted: 31 Mar 2022 12:57 PM PDT

需求

JAVA 语言, 提供一个静态方法接收动态 Integer 参数,把接收到所有 Integer 不为 Null 的相加 返回总和。

支持 stream ,需要一个最优的写法! 可以评论一下,看看大佬们的代码功底!让我这个菜鸟采纳一下~

请教各位大佬, IOS 系统开发 APP 如何避免由于内存过大被系统强制杀死?

Posted: 31 Mar 2022 12:48 PM PDT

如题。

有人想来日本干 IT 开发吗

Posted: 31 Mar 2022 12:26 PM PDT

在国内卷够了、来日本干 IT 躺平吗

gopls.exe 到底在干什么? cpu 占用那么高

Posted: 31 Mar 2022 11:13 AM PDT

win10 只是打开 vscode 和 golang 代码,也没有执行编译,为什么 gopls 的 cpu 占用到 20%,而且一会儿高一会儿低。 有老哥讲解吗?

欢迎大家加入 Java 交流群

Posted: 31 Mar 2022 10:15 AM PDT

最近创建了一个 java 交流群,欢迎各位技术大大加入; 大家一起交流技术,工作,跳槽等行业信息。

微信群: http://101.43.73.151/5566.png

Java 项目该不该用 stream 流来编写代码?考虑 code viewer

Posted: 31 Mar 2022 08:13 AM PDT

Go 流媒体(直播音视频)服务器 LAL - 开源自荐

Posted: 31 Mar 2022 07:23 AM PDT

Live And Live



lal github 地址https://github.com/q191201771/lal

  • ▦ 一. lalserver 简介
    • ✒ lalserver 特性
    • ✒ 协议转换支持情况
  • ▦ 二. lalserver 安装、运行
    • ✒ 方式 1, 源码编译安装
    • ✒ 方式 2, Docker 镜像
    • ✒ 方式 3, 下载编译好的二进制可执行文件
  • ▦ 三. lalserver 使用
    • ✒ 各协议推拉流 url 地址列表
    • ✒ lalserver 配置文件
    • ✒ lalserver HTTP 事件和接口
    • ✒ lalserver 进阶
  • ▦ 四. 重新认识 lal
    • ✒ lal 的三层结构
      • ✦ 其他 demo
      • ✦ 流媒体协议栈库 package/library
      • ✦ Golang 通用基础库-naza
    • ✒ lalext
      • ✦ WebRTC
      • ✦ MCU 合流
  • ▦ 五. 联系作者

▦ 一. lalserver 简介

lalserver是纯 Golang 开发的流媒体(直播音视频网络传输)服务器。目前已支持 RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket[S]-FLV/TS 协议。

lal 特性图

✒ lalserver 特性

  • 全平台
    • 支持 linux/macOS/windows 多系统开发、调试、运行
    • 支持多 arch 运行。比如 amd64/arm64/arm32/ppc64le/mipsle/s390x
    • 支持交叉编译。可在任一平台编译出其他平台的可执行文件
    • 运行无依赖。可执行文件无任何环境、库安装依赖,可单文件独立运行
    • (开放全部源码的同时)提供各平台可执行文件,可免编译直接运行
    • 支持 docker
  • 高性能。多核多线程扩展,支持高并发,性能和同类型c/c++开发服务处于同一水平
  • 高可用。完善的单元测试。并且有多个线上环境应用
  • 多种直播流封装协议
    • 支持 RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket[S]-FLV/TS
    • 支持不同封装协议间相互转换
  • 多种编码格式。视频支持 H264/AVC ,H265/HEVC ,音频支持 AAC
  • 多种格式录制。支持 FLV ,长 MPEGTS ,HLS 录制(HLS 直播与录制可同时开启)
  • HTTPS。支持 HTTPS-FLV ,HTTPS-TS ,HLS over HTTPS 拉流
  • WebSocket/WebSockets。支持 Websocket-FLV ,WebSocket-TS 拉流
  • HLS。支持 LIVE 实时直播、VOD 全列表直播。切片文件支持多种删除方式。支持内存切片
  • RTSP。支持 over TCP(interleaved 模式)。支持 basic/digest auth 验证。支持 GET_PARAMETER
  • RTMP。支持给单视频添加静音音频数据,支持合并发送。兼容对接各种常见 RTMP 实现
  • HTTP API 接口。用于获取服务信息,向服务发送命令。
  • HTTP Notify 事件回调。获取时间通知,业务方可以轻松定制自身的逻辑。
  • 支持多种方式鉴权
  • 支持分布式集群
  • 静态 pull 回源。通过配置文件配置回源地址
  • 静态 push 转推。支持转推多个地址。通过配置文件配置转推地址
  • 支持按需回源。没有观众的回源拉流可以主动关闭
  • CORS 跨域。支持 HTTP-FLV ,HTTP-TS ,HLS 跨域拉流
  • HTTP 文件服务器。比如 HLS 切片文件可直接播放,不需要额外的 HTTP 文件服务器
  • 监听端口复用。HTTP-FLV ,HTTP-TS ,HLS 可使用相同的端口。over HTTPS 类似
  • 秒开播放。GOP 缓冲
  • 支持叠加静音音频
  • 支持先拉流后推流
  • 支持推流断开后重连,拉流端无感知

✒ 协议转换支持情况

见: 附录-协议间转换支持情况

▦ 二. lalserver 安装、运行

lalserver 支持 3 种安装、运行方式:

✒ 方式 1, 源码编译安装

下载源码:

git clone https://github.com/q191201771/lal.git 

编译:

cd lal export GO111MODULE=on && export GOPROXY=https://goproxy.cn,https://goproxy.io,direct make 

tips:
如果使用 GoLand 等 IDE 编译,那么编译lal/app/lalserver目录即可。
如果没有安装 Go 编译器,可参考《 CentOS 或 macOS 安装 GoLang 》,windows 操作系统可自行上网搜索教程。

运行:

./bin/lalserver -c conf/lalserver.conf.json 

注意,windows 平台将路径分隔符/换成\

✒ 方式 2, Docker 镜像

下载镜像:

docker pull q191201771/lal 

运行镜像:

$docker run -it -p 1935:1935 -p 8080:8080 -p 4433:4433 -p 5544:5544 -p 8083:8083 -p 8084:8084 -p 30000-30100:30000-30100/udp q191201771/lal /lal/bin/lalserver -c /lal/conf/lalserver.conf.json 

如果想构建自己的 Docker 镜像,可参考 附录-构建自己的 Docker 镜像

✒ 方式 3, 下载编译好的二进制可执行文件

lal 提供linux/macos/windows平台编译好的 lal 二进制可执行文件(zip 压缩包形式)。
下载地址见: 《 github lal 最新 release 版本页面》
下载好的文件按方式 1 运行,不再赘述。

▦ 三. lalserver 使用

✒ 各协议推拉流 url 地址列表

lalserver 启动成功后,就可以开始使用了。
作为流媒体服务,最主要的功能就是流数据转发。比如:

使用 ffmpeg 推 rtmp 流:

ffmpeg -re -i demo.flv -c:a copy -c:v copy -f flv rtmp://127.0.0.1:1935/live/test110 

使用 ffplay 拉 rtmp 流播放:

ffplay rtmp://127.0.0.1/live/test110 

更多协议见: lalserver 各协议推拉流 url 地址列表

tips:
更多第三方客户端的使用方法见: 常见推拉流客户端信息汇总

✒ lalserver 配置文件

如果你想进一步了解 lalserver 的功能,可以看看: lalserver 配置文件说明

✒ lalserver HTTP 事件和接口

通过 lalserver 提供的丰富的 HTTP 接口,业务方可以在保持 lalserver 独立运行的情况下,使用自身熟悉的语言,轻松定制符合自身逻辑的业务系统。

✒ lalserver 进阶

▦ 四. 重新认识 lal

✒ lal 的三层结构

lal 源码架构图

✦ 其他 demo

lal 项目中,除了/app/lalserver这个比较核心的服务之外,在/app/demo目录下还额外提供了一些小应用,比如推、拉流客户端,以及压测工具,流分析工具,lalserver 集群的调度示例程序等。
这些 demo 你既可以直接使用,又向你演示了 lal 所提供的协议栈如何使用。

了解更多请访问: Demo 简介

✦ 流媒体协议栈库 package/library

lal 中的协议栈都是独立的,与应用分层设计的。并且客户端和服务端的协议栈都有。
业务方可以在自身的应用中集成 lal 的协议栈 package 库。

✦ Golang 通用基础库-naza

lal 将非流媒体特有的通用基础库抽象在一个独立的 github repo naza中。

了解更多请访问: 《 naza github 地址》https://github.com/q191201771/naza

✒ lalext

站在巨人的肩膀上才能看的更远。lal 在另一个 github repo lalext中,将 lal 的代码与第三方的库结合,实现了更丰富的功能。

✦ WebRTC

rtmp 转 WebRTC 的网关

了解更多请访问: 《 lalext github 地址》https://github.com/q191201771/lalext

✒ 进行中

  • lal:
    • 支持国标 GB28181 协议
    • lalserver 插件功能,支持业务方注册自定义协议
  • lalext: 使用 lal 库中流传输以及装封装功能的代码,结合 ffmpeg 库中编解码功能的代码,演示 MCU 合流

▦ 五. 联系作者

作者微信,扫码加好友:

lal 作者微信

欢迎任何技术和非技术的交流。

所以 Spring 的 0day RCE 漏洞被证实了?

Posted: 31 Mar 2022 06:54 AM PDT

No comments:

Post a Comment