高铁真快

今天出差去广州,高铁上面,目前正在开往东莞虎门,半小时后就到广州南。非常快。

终端容器无关化(Containerless) :与服务无关化(Serverless)的概念类似,即在保持顶层业务研发语言不变更的情况下,在下层可以兼容性地升级、替换终端容器的能力,让用户无需关心终端容器的运维,只要将精力聚焦到业务逻辑上的技术。

一、前言

React2X 是一款面向多终端、跨平台、容器无关化研发框架。在整个美团前端技术栈日益规范的趋势下,React技术栈在我们技术体系环节中的地位变得越来越重要。在广告、营销这些推广属性的业务上,在各个终端(包括美团App、美团外卖App、大众点评App,以及站外的微信小程序、百度小程序、头条&抖音小程序等其他终端)实现“一次开发,同步需求上线”的业务诉求也变得越来越多。在这样的背景下,我们定义了React2X应用的核心场景:

  • 面对美团内部丰富多样的技术容器体系(Mach、MRN、Titans、MTFlutter、Tango、MMP等,见文末术语解释),如何保证跨容器开发体验的 一致性 ,以及建设跨容器应用开发的 生态能力 ,是我们需要解决的问题。
  • 公司内丰富的终端容器化技术蓬勃发展,而因业务升级带来的改造成本也比较大,亟待一款 高扩展性 设计的顶层框架作为技术抓手。
  • 跨容器动态化能力覆盖,逐步成为各个业务方越来越重视的基础能力,可以大幅缩短需求交付的周期,提高上线发版的效率,并能有效地解决包体积大小的问题,提升业务的 敏捷性
  • 多场景下的 同构诉求 ,例如在各种推广页、模块化、游戏同构,还有轻量布局差异的PC/App同构,可以节省多端研发的人力。

最终,我们的核心痛点围绕在美团系·小程序和美团系·App矩阵的“同一个需求的多次开发运维”上。为了解决研发人力瓶颈的问题,我们需要开发一款“一次研发,多终端容器复用”的研发框架来提升研发效率。

通过调研,我们找到了业界的一些解决方案,像是美团最早的mpvue、腾讯的WePY、滴滴的Chameleon、京东的Taro等等。经过比较和试用,然后基于投入产出比的判断,最终我们选择“站在巨人的肩膀上”研发定制一款满足美团技术、业务场景的研发框架——React2X(下文简称R2X)。从R2X第一个版本发布,一直到现在,已经接受了美团内部多个业务线两年多的时间考验。希望通过本文让大家对R2X有一个大致的了解,我们也希望开发过程中的这些思考和经验,能够帮助到更多的同学。

二、目标与场景

2.1 核心目标

为了解决业务需求在多端容器需要重复开发的难题,通过代码复用实现开发提效,我们确定了以下的目标:

  • 解决公司内部多终端容器开发痛点 :实现Webview容器、小程序容器、MRN容器、Mach容器、游戏容器、部分运营推广场景PC容器的代码同构复用,统一开发规范,抹平开发差异,并提供对其他容器的扩展能力。
  • 建设跨容器动态化能力 :跨容器动态化能力的缺失,导致产品不能够通过快速迭代来验证需求的效果,这个问题严重限制了业务的发展。跨容器动态化能力可以解决美团外卖业务客户端发版限制和小程序包大小限制的问题,帮助业务实现快速发版上线以及线上问题热修复的能力。
  • 建设容器无关的开发生态体系 :R2X最终要解决的是容器差异性,进行统一的技术生态能力建设,为多终端容器开发场景提升生产和运维效率。

2.2 应用场景

R2X开发框架主要期望能最终面向多终端应用的终端容器,用于场景化研发:

图1

即:

  • 业务项目基于React语法为技术框架基础。
  • 业务方有在多终端/多容器(包括MRN容器、Webview容器、MP容器、Flutter容器、Mach容器、PC浏览器容器)运行的需求。
  • 业务方有特定的场景化诉求,包括推广页、模块化、小游戏、PC/App同构等等。

三、业界方案

针对上述核心目标和应用场景,我们对市面上的跨容器框架进行了调研。由于美团外卖的技术栈统一是React为主,所以我们的必备要求是:一款以React为DSL语言的复用框架,能快速融入美团的技术生态。

根据下表的对比,如果以React为DSL语言出发,当时就只有Taro一家能满足我们的业务诉求,但它的生态环境并不适合在美团体系内使用。基于多方面因素的考虑,我们决定结合各大主流框架之所长,然后开发出一款属于美团外卖的跨容器复用框架。

对比项 mpvue Taro 1.3 Chameleon WePY UniApp
DSL Vue 类React(Nerv) 类Vue Vue Vue
是否支持 React Native 是,但支持效果不佳 Weex
兼容 API 有(API支持程度不一) 自研多态协议
跨端组件库
美团生态
语法校验 ESLint 自研
TypeScript
定制化扩展 可自研Plugin
编译扩展
调研结论 不匹配 部分满足 部分满足 不匹配 不匹配

注:前期调研时间截止到2019年05月,可能与当前数据存在一定的出入。

四、挑战与优势

4.1 项目难点

当我们决定要打造一款属于美团外卖的跨容器复用框架之后,在实现的过程中主要遇到了以下四个方面的挑战:

① 各个容器之间差异性适配成本

  • MRN/小程序/Webview在DSL上有着完全不同的语法,在各容器的Native能力上更是差异巨大。
  • 同一容器在不同端上也存在不少的差异,比如美团外卖App中MRN容器和美团App中MRN容器之间,就有Native模块、通参协议、KNB桥协议等不对齐的地方。

② 类小程序容器的转换复用

  • 小程序容器以WXML和JavaScript相结合实现页面渲染,与React这种纯JavaScript声明式语法难以进行结合,如何突破限制是一大难关。
  • 小程序容器以微信小程序为首,衍生了很多其他类小程序容器,如何与它们进行复用也是一大挑战。

③ 业务接入的使用成本

  • 作为一个新定义的框架,如何让业务方快速上手,如何从旧业务线进行迁移。
  • 如何融合美团的基建生态,让业务方快速进行接入。

④ 顶层架构的合理设计

  • 框架整体设计的高可维护性、高度扩展性。

4.2 项目优势

4.2.1 功能特点对比

目前,业界以小程序作为跨端目标平台的框架较多,但大多都是使用Web前端技术栈作为基础,但同时兼顾React Native的技术栈就比较少。下表中列出的是支持以React、类React作为DSL的相关框架进行对比。

R2X Taro 1.3 Taro 3.0 Rax Remax
原理 R2X 1.0重编译时,R2X 2.0重运行时 重编译时 重运行时 重运行时 重运行时
容器重点 以MRN,小程序,WebView为主,同时支持MTFlutter、Mach、游戏、PC浏览器 以小程序、Web为主,React Native支持不多 以小程序、Web为主,React Native交给58团队支持 小程序、Web、Flutter 小程序、Web
API 支持KNB桥&对多平台API进行了统一 对多平台API进行了统一 对多平台API进行了统一 多平台不统一 多平台不统一
跨端组件库 有TaroUI,但不支持React Native 有TaroUI,但不支持React Native
业务组件扩展 提供扩展方案 参考TaroUI 参考TaroUI 提供扩展方案 提供扩展方案
美团内部生态支持 已支持埋点监控等
模块化能力 支持 不支持 不支持 不支持 不支持
小程序动态化能力 支持 不支持 不支持 不支持 不支持
编译插件扩展 支持 不支持 支持 支持 支持Webpack配置

综上所述,从目前的业务形态来看,R2X在容器的匹配程度以及美团生态支持程度上看,是现阶段的最佳方案。R2X相较于业界其他框架来说,拥有更加完善的适用于美团外卖团队的本地化实现。

4.2.2 性能数据对比

基于业界跨平台框架和美团内部的跨平台框架,我们针对性能也进行了Benchmark测试,最终对比结果如下。

小程序性能对比

框架 创建 更新 添加 交换 删除
R2X-MP 947.6 586.8 1467.2 1355.2 82.2
Remax 2798.2 1872.6 5162.2 4818.2 86.4
Taro-MP 1653.4 976.4 2483.2 2256.6 65.2

结论 :可以看到,在小程序Benchmark测试结果中,R2X领先于Remax和Taro。

与React Native性能对比

框架 创建 更新 添加 交换 删除
R2X-MRN 309.875 83.75 384 191.875 82.125
MRN 297.625 105.25 400.125 231.625 65.875
Taro-RN 209.5 77.5 246.25 85.125 17.125

结论 :在React Native的Benchmark测试结果中,R2X和MRN基本持平,但都低于纯React Native的性能表现。

4.2.3 同构场景对比

除了支持了基本的React Native、小程序和Webview容器同构场景之外,R2X还实现了在MTFlutter、Mach、小游戏(H5游戏、微信小游戏&小程序、美团小游戏)、PC浏览器等容器上的同构能力扩展,相比于业内的其他跨容器开发框架的生态也更加丰富和健全。

React Native 小程序 Webview Flutter 模块级容器 小游戏容器 PC浏览器(PC/App同构)
R2X 支持 支持 支持 支持 支持 支持 支持
Taro 支持 支持 支持 不支持 不支持 不支持 不支持
Rax 支持 支持 支持 不支持 不支持 不支持 不支持
Remax 支持 支持 支持 不支持 不支持 不支持 不支持

五、技术全景

图2

上图为R2X的架构全景图,整体架构可以按照从下到上,从左到右的视角进行解读:

  • 最下层是R2X的生态环境建设,在R2X内部去实现公司生态的常用SDK以及业务中的各项专题能力;并通过搭建物料市场/插件市场,以业务共建的形式丰富R2X生态。
  • 再上层是R2XCore的根基,通过解析Command命令来执行唤起构建器,并实现了类似Webpack的插件系统,以插件化的形式组织驱动整个核心构建流程,便于维护以及扩展。
  • 再往上是跨端容器层,它是整个跨端能力的核心,通过实现了不同的容器插件来将R2X代码编译成各端可执行代码,并通过运行时能力对组件/API进行对齐。
  • 最上层是承载的App端,目前有美团外卖、大众点评、美团等多款移动App终端。
  • 最右边是R2X在研发、发布、运维以及用户文档上做的一些建设。

因为R2X覆盖了美团内部大部分的主流容器场景,所以技术体系较为复杂和庞大,大家可以根据自身的业务形态,选择性地去了解对应场景的同构方案。

5.1 底层基础框架

5.1.1 R2X-CLI的设计

CLI作为R2X项目驱动器,它不仅包含了命令行的启动,更重要的,它是各个编译构建的核心。

在早期,CLI执行build命令时,我们通过–type来区分不同的构建容器,从而加载不同的编译逻辑。通过指定构建容器的形式来实现同一套代码能够构建出不同的容器产物。但经过长时间的业务迭代,我们发现了这种结构存在的问题:

  • 整体流程冗长且复杂,长时间迭代会变得越来越难以维护。
  • 每个容器的构建流程相互独立,且构建逻辑各不一致,有多处重复的逻辑处理。
  • 编译流程缺少统一的关键节点,编译时无法进行业务方的定制扩展。

针对以上问题,我们考虑对CLI进行了一次全新的重构,引入插件化能力(关于插件化能力的具体实现会在下文详细描述)。CLI整体结构变成如下图所示:

图3

整个CLI模块只需要关心参数的解析以及插件的加载执行,不需要再实现各个容器的具体编译逻辑。通过Hooks的形式,将编译的各个时机暴露给插件,插件基于这些Hook进行编译能力的实现,最终输出产物给CLI模块。这种形式带来了以下几个好处:

  • CLI结构变得清晰,只需要维护配置解析、插件解析等功能。
  • 扩展性增强,可通过插件化的形式新增或删减容器/编译能力,保证代码独立维护功能的单一性。
  • 编译流程可梳理,无论什么容器的编译流程都基于编译器暴露的时机执行并串联,整体流程清晰明了。

5.1.2 组件及API的设计

R2X的目的是希望通过一套代码能够在多端上运行,但是由于多端差异的存在,我们需要设计一套统一的标准规范来进行对齐。在运行时部分,主要分为组件/接口的对齐。

多端差异

在开始讲述实现之前,我们先来看看各端之间的差异到底在哪些地方。

组件(标签)差异

API差异

  • 接口差异 :在不同端中都提供了相同或近似的功能,但是其实现方式以及调用参数可能存在着很大的差异,比如数据缓存Storage,小程序中用wx.setStorage/wx.setStorageSync,H5则用localStorage.setItem,而MRN中AsyncStorage.setItem,几乎每一个功能点都有着多多少少的差异。
  • 容器差异 :各个端所提供的API都是各自的容器量身打造的,比如小程序的用户接口类API、广告类API,完全是针对小程序所处的微信环境打造的,这类功能对于其他端来说是完全不相干的东西。
  • 能力差异 :各个端之间的差异我们可能通过定制的手段来适配,然而并不是所有的功能点在各个端上都能够实现。比如在H5中就无法做到像小程序、React Native中提供很多原生能力,像是文件保存读取等等,这一类差异性在适配过程中都属于不可抗拒、不可抹平的差异。

样式差异

小程序的WXSS和H5的CSS在参数属性上其实是几乎一致的,但是在层级关系上有着很大的差别,小程序分为全局样式与局部样式,各个组件之间的样式也是不会相互影响(默认配置下)。而对比React Native采用的StyleSheet,是用Inline Style的方式,不支持全局样式,不支持标签样式,并且属性有诸多限制,如只能使用Flex布局等等。

如何适配?

根据上文,我们已经了解到了各个端之间有着非常大的差异点,那我们应该如何克服这些困难呢?

图4

由于各端对组件和API的支持程度不同,我们选定了一端为基础标准,定义好各个组件的属性以及接口参数,通过TypeScript的Interface进行实现。然后在各个端分别基于以上的接口进行功能对齐实现,对于端能力限制的功能进行了一定取舍,对高优功能进行了SDK底层实现适配。最终,我们基于已有的功能封装实现了一套完整的基础组件 @r2x/components 和基础API @r2x/r2x

5.1.3 开放式插件能力

随着R2X的在美团内部的应用越来越多,大家对于R2X模式的认可度也在不断提高,我们从业务方中经常听到以下这些问题:“是否可以增加支持某某功能/容器”,“我们业务架构比较特殊,能否做出一些调整”。业务方对R2X会有更多功能/容器的诉求,也会有更多定制化的需求出现。

所以,我们决定实现一套完整的开放式插件能力,提供一种相对比较简单的方式,让大家能够自己来定制这些特殊需求。在最新的版本中,我们将R2X的编译时进行了重构,在新的编译时架构中引入了基于 Tapable 的插件系统。开发者可以通过编写插件的方式为R2X拓展更多功能,或者为自身业务线定制更多的个性化功能。

在插件类型分为两类:

  • 容器插件 ,用于封装R2X所支持的容器的核心编译能力。
  • 功能插件 ,基于已有的容器插件,在此基础上进行某种特定功能的自定义实现。

插件能力的整体架构如下:

图5

借助开发式插件能力,我们将之前编写了若干个平台容器插件,开发者安装后即可使用:

  • 微信小程序插件:@r2x/plugin-container-wxapp。
  • MRN容器插件:@r2x/plugin-container-mrn。
  • H5/Titans容器插件:@r2x/plugin-container-h5。

当然,用户也可以基于开放式插件能力,参考现有的容器插件自行扩展一个容器:

  • R2X支持Caster(美团小程序动态容器)容器插件:@r2x/plugin-container-caster。
  • 到店广告H5容器插件:@dp/plugin-adp-h5-component。

除了扩展新的容器平台,我们还可以通过继承现有的容器插件,来编写一些特殊的定制化功能插件。

1. 对代码进行预处理

基于开放式插件能力,我们可以像Babel插件一样,通过对AST语法的修改对代码源文件进行编译前后的修改。比如:修改文件引用路径、插入代码片段、处理本地图片等等。

2. 对文件产物进行修改

在编译产出生成时,我们可以对编译文件的内容、文件路径、文件结构进行修改。结合自身业务的定制化,CLI可以将R2X项目和现有的原生项目进行结合改造。

除了以上功能,插件化能力为用户在编译时提供了极大的自由度。如果你想体验的话,欢迎加入美团外卖技术团队。

5.1.4 特性能力-多态能力

为什么需要多态能力?

多态能力是用于提供跨端时各端组件及API的统一解决方案。基于多态能力,开发者可以定制自己的跨端组件。而R2X具备了完善的跨端能力,能够覆盖多终端和容器,为什么还需要多态?

“技术作用于业务,但业务逻辑不会跟着框架走,有时候开发者需要突破框架的限制。同时,H5/小程序/React Native存在端上的差异,需要开发者人为进行环境判断。逻辑一复杂、跨端数量一多,代码可读性变低,维护成本起飞,这不是我们的本意。”

基于这样的背景,R2X提供了扩展性良好的多态能力。

R2X多态能力介绍

对于多态能力的支持,我们分为两类:

  • 多态组件/API,R2X根据文件后缀区分编译目标端。

图6

图7

  • 差异化代码,R2X提供getEnv方法用于判断当前语句编译目标端类型。
1
<View style={{color: R2X.getEnv() === "WEAPP" ? "green" : "blue" }} />

通过差异化代码可轻松满足端差异诉求。

5.1.5 生态支持-发版部署

发版部署作为R2X生态闭环的最终环节,肩负着将多端项目上线的重任。多端发版部署,最重要的是支持灵活配置。R2X发版部署过程基于Talos(美团内部自研的部署工具)实现,开发者经过可视化配置即可部署至指定容器中。

图8

开发者首先配置该项目需要发布的端,其次只需要配置发布的相关容器信息即可。经过指定端的编译后,会将代码部署至相关平台:H5部署在S3(美团内部自研的文件存储),React Native部署在DD(美团内部自研移动端动态下发平台)。对于需要部署至线上环境的R2X项目,我们也接入了ED(美团内部自研持续交付系统),由发版值班同学统一执行部署,规范化发布的流程。

5.1.6 生态支持-监控运维

由于Raptor(美团内部面向基础设施和端到端应用程序的监控平台)目前不同容器的监控SDK使用存在差别。我们需要在R2X框架内对其进行进一步的API抹平,减少用户的使用和学习成本。通过封装R2X/OWL模块,通过在运行时调用不同的API来抹平其差异,来实现多端统一监控。最终的监控框架如下图所示:

图9

5.2 应用场景同构

5.2.1 页面级容器场景同构

MRN、小程序以及H5的页面级容器同构方案,在这里不过多赘述,和业界的开源框架实现思路大同小异。下面将重点介绍一下我们在小程序动态化能力方面做的事情。

小程序动态化同构

在小程序动态化能力建设方面,R2X与Caster和Tango(外卖小程序动态容器)在能力共建上达成一致,实现了R2X在两种小程序容器上动态化能力的接入。R2X小程序动态化核心结构分为3层:

  1. 应用层 :应用层遵循R2X DSL规范,业务侧根据该规范编写自己的多端业务逻辑。
  2. 编译器 :预编译层负责将JSX/TSX转换为标准的JavaScript代码,并根据R2X多端协议处理小程序业务逻辑(涉及到环境变量的替换,依赖的替换或处理等),最终将所有的业务逻辑编译成为AST文件,部署到云端。
  3. 运行时 :Caster与Tango虽然因为定位差异采用不同的运行方案,但是整体范式基本相同;概括来讲,两者都是通过JSVM将云端拉取的AST文件解释为可运行的JavaScript代码,再由特定的渲染器进行UI渲染;核心差异在于Caster内部通过微信的Kbone来模拟浏览器环境进行渲染,而Tango通过react-reconciler生成类VNode树,再利用小程序的template模板能力来进行渲染。

图10

R2X动态化编译核心流程如下:

① 读取配置参数,为后续构建提供信息。 ② 处理非动态化部分,调用R2X小程序的编译流程生成app.json/app.js、project.json等基础项目信息。 ③ 执行编译流程,Caster(美团小程序动态容器)和Tango(外卖小程序动态容器)的编译流程存在部分差异。

a.Caster编译流程 1. 安装Caster SDK。 2. 使用Caster API生成动态化基座。 3. 将不需要动态化的本地依赖和不能动态化的原先小程序组件复制到基座当中。 4. 使用rollup将动态化组件打包成JS Bundle,并写入磁盘。

b.Tango编译流程 1. 安装Tango SDK。 2. 使用Tango SDK的API 将动态化页面编译成AST,并写入到磁盘(备注:Tango 相对于Caster少了生成动态化基座的流程,因为在外卖小程序当中已经对动态化基座进行了内置,并且集成原生组件时,需要和基座开发人员进行沟通,将原生组件进行集成,所以在Tango当中应改尽量避免使用原生小程序组件。)

5.2.2 模块级容器场景同构

在模块级动态化同构方案上,我们在客户端底层上依赖Mach容器。在小程序容器中,我们克服了Mach为了追求高性能摒弃了React运行时、JS VirtualDom所带来的困难,单独为Mach小程序容器设计了渲染方案,实现了R2X-Module在客户端和小程序上99%以上的代码同构率。

整体方案

图11

  1. 核心驱动包 ,容器驱动的核心,针对渲染能力、解析能力、缓存能力、性能监控四个方面进行了实现,达到动态化驱动效果。
  2. 业务容器自定义 ,基于SDK提供的驱动能力,针对不同展位特性进行了容器自定义功能扩展配置,让业务方可根据实际业务场景自行扩展。
  3. 分环境构建 ,主要实现了将类React语法进行AST编译解析,根据构建平台分别编译成对应的Bundle产物。
  4. 自动化构建部署 ,将构建能力接入Talos,再结合Mario等工具实现一键部署,将编译产物根据配置项上传至DD平台。

模板驱动方案

目前,R2X-Module在客户端和小程序容器的同构能力,已经在闪购业务上完成落地,已上线3个模板的同构率在99.3%以上,在性能方面首次渲染时长和模板渲染时长的TP50时间分别是185ms和144ms,比较优秀,但还存在可优化的空间。外卖小程序R2X-Module SDK的接入正在测试中。R2X-Module SDK初始化以及模板加载渲染流程入下图所示:

图12

5.2.3 PC/App适配同构

在移动互联网发展已经高度成熟的今天,移动端的PV流量占比绝大数,以外卖广告商家端为例,PC端仅仅占有很少比例,其中PC流量占比在我们部分业务上已经不及5%。因此在某些场景下实现PC/APP的同构方案能够解放一部分人力,对提高开发效率来说是十分必要的。目前,外卖广告商家端的一些轻量布局差异的页面,已经完成了PC/App同构的方案设计和落地。

样式同构适配

图13

图14

端能力扩展

R2X的基础能力支持H5/MRN/微信小程序三端,缺少对PC微前端子项目的支持。要实现PC/App多端同构,需要对R2X的端能力进行扩展。PC端本质上也属于Web端,因此PC微前端的端能力扩展可以复用大部分的H5的端能力。整体架构图、技术设计要点、扩展流程图如下所示:

图15

平台代码处理

在项目同构开发中,不可避免地会出现跟平台强相关的代码或者业务逻辑,比如某些API调用的是App的底层能力,只能在React Native中使用,在Web端肯定是不支持的。或者由于产品需求的原因,某些交互或者展示差异较大等等。而项目针对某一端进行编译、打包时,其他不相关的端代码是无用、多余的,如果保留的话,不仅会增加代码体积,甚至会出现编译报错,因此我们需要借助平台代码处理的能力来进行优化。平台代码的处理主要包含三部分:模块导入、组件展示、业务逻辑。

主要思路是使用注释和指定平台的方式,让特定的平台代码只在特定平台生效,注释关键字 %%platform%% , 比如 %%RN%% 表示React Native端独有, %%MICRO%% 表示PC微前端独有, %%MICRO|H5%% 表示PC微前端、H5 两端生效。示例代码如下:

1
2
3
4
import A from '@r2x/r2x-a'; // %%RN%%只在React Native端保留。
import B from '@r2x/r2x-b'; // %%MICRO%% 只在MICRO端保留。
import C from '@/utils/c'; // 这是所有端生效的公共模块。
import D from '@r2x/r2x-d'; // %%MICRO|H5%%在MICRO、H5多端生效的模块。

5.2.4 小游戏容器场景同构

实现react2x-game同构方案主要做的两点:渲染层的兼容、业务层的兼容。

  1. 渲染层的兼容 :实现游戏引擎在多端环境下渲染能力的兼容(Canvas、WebGL)。
  2. 业务层的兼容 :实现基础API、项目流程、公共模块的兼容,制定游戏差异的个性化定制规范。

1. 渲染层兼容

在上文,我们提到过“无论是H5游戏、小程序、小游戏、美团小游戏都为我们提供了Canvas、WebGL控件”,很大程度地降低了我们兼容渲染层的复杂度。下面表单,是各端对于语法以及Canvas、WebGL、Document、Window等基础功能的支持情况:

对象 Webview 微信小游戏 微信小程序 美团小游戏
语法 JavaScript JavaScript JavaScript JavaScript
Canvas 支持 支持 支持 支持
Canvas(离屏) 支持 支持 不支持 支持
WebGL 支持 支持 >2.11.0 支持
Ducument 支持 不支持 不支持 不支持
Window 支持 不支持 不支持 不支持

可以看出,在语法层面各端都支持了JavaScript语法,但是在执行环境以及基础功能上的差异比较大,总结来说:

执行环境 :小游戏、小程序不具备DOM、BOM的能力(渲染引擎中会大量使用)。 基础功能 :小程序不支持离屏Canvas,在2.11.0版本以后才开始支持WebGL。

为了解决这些问题,我们设计开发了adaptor层,用来模拟document、window的能力。使游戏引擎可以在非H5的环境下正常的执行和调用BOM、DOM的基础功能。同时,制定离屏canvas的适配方案,用来解决小程序无法支持离屏canvas的问题。为了获取到有效离屏canvas,我们制作了 “r2x-add-wxml-loader” ,在.wxml文件的loader阶段自动注入额外的< canvas/ >控件,并隐藏于手机屏幕之外,用于模拟游戏引擎中的离屏canvas。

img

2. 多端兼容构建

在构建层面,我们通过集成的多种个性化插件工具,对多端代码进行差异处理。如:环境变量注入、各端适配代码的混入、规范检测、代码解析和转化等。针对小游戏、小程序代码和执行环境的特殊性,制作wx-build-plugin、lwxapp-build-plugin等用于处理小游戏和小程序的打包工作。结合上文中提到的各类差异的处理方案,制作add-wxml-loader、transfrom-loader、wxss-loader等工具协助完成项目构建。如下图17所示,构建之初会注入本次构建的环境变量,读取和分析配置文件,集成和初始化构建工具集合,为项目构建做准备。然后在构建环节,针对各端的差异进行差别处理,分析层针对不同文件进行解析,并在转换层进行转换和构建,最终生成各端需要的最终产物。

图17

5.3 落地场景与效果

5.3.1 落地场景

R2X-推广页容器场景同构R2X-模块化容器场景同构R2X-小游戏容器场景同构

5.3.2 效果收益

R2X在美团外卖业务中得到了广泛的应用。截止2021年10月,R2X累计在美团内部已有二十多个部门在使用或者在调研中,总计落地了上百个工程、页面,框架下载量达百万次,页面平均代码同构率达90%以上。R2X生态体系在容器代码复用与运维层面,累计为美团节省成本上千人/日,并提升动态化页面转化5%-8%的成功率。

六、展望与总结

综上所述,在美团外卖多元化业务形态和容器多样性的情况下,跨容器复用成为了发展的必经之路。而R2X在经历了两年的迭代下也取得了阶段性的成果,在美团各个业务场景都完成了业务的落地覆盖,针对公司的生态环境接入也做出了不少的基础建设。我们相信跨容器多端代码复用依旧是当前缩减项目交付周期,减少研发成本,提升研发效率的重要一环。但目前我们在很多复杂的业务场景下做的不够完美,因此还有许多工作待完善,例如:

  • 开发体验优化 ,目前想接入或正在接入的兄弟部门已经越来越多,如何减少接入成本、丰富基础建设、优化开发体验、帮助大家快速迁移接入将是下一阶段的重要课题。
  • 渲染性能优化 ,在美团外卖场景下,性能优化一直是我们在兼顾高效生产的另一个重要指标。在小程序动态化场景下,动态化方案React渲染器对性能有一定程度限制,如何突破这一难关将会是动态化全面推广的“敲门砖”。

最后,感谢各个相关研发团队对R2X建设过程中的鼎力支持,R2X的发展离不开所有参与者日以继夜的投入和贡献,我们会持续基于R2X在终端容器领域进行更多探索。如果您觉得R2X还不错,或者对美团的R2X框架比较感兴趣,欢迎跟我们一起交流探讨。

导读

由于网约车业务本身的复杂性以及我们垂直式的领域化架构约束,网约车服务端技术团队在对端渲染业务需求的迭代过程中,碰到了一系列的问题,影响了研发效率。本文从这些具体问题入手,分析产生的原因,介绍我们的解决思路和方案,以及方案的建设落地过程。

1. 服务端架构演进回顾

过去几年,滴滴网约车为了满足不同用户的个性化出行需求,逐步推出了越来越丰富的品类和功能。随着品类功能的不断增加,我们系统的复杂度也越来越高,为了应对这一挑战,网约车服务端技术团队构建了一个「出行平台」,内部又称湾流平台。湾流平台的演进主要经过了以下几个阶段。

湾流平台1.0(2017-2018)

在1.0阶段,滴滴网约车的主要业务重心是丰富品类,为用户提供更多选择,其中包括专车、豪华车、优享等。在这个阶段,湾流平台还是一个单体服务,主要面临的挑战是如何快速新增品类并支持多品类之间的差异化开发。

为了应对这些挑战,我们引入了配置化和插件化。配置化使得新增品类可以快速上线并进行复用,提高开发效率。插件化则能够隔离不同品类之间的差异逻辑,确保各品类的独立性和灵活性

2b61f82b01190d08c299ed5400fee97d.png

湾流平台2.0(2018-2020)

在2.0阶段,随着品类的不断丰富和个性化功能的增加,开发团队也不断壮大,系统规模逐渐庞大,但日常的迭代效率和稳定性出现了明显下降。为了解决这些问题,我们从两个方向对湾流平台进行了改造。

首先,按照领域驱动设计(DDD)的思路,对单体服务进行了拆分,降低整体系统的复杂度,同时也解决了团队成员并行开发导致的上线冲突和排队的问题,提高了开发效率。

9a1ea3e98cbd614661966cca758f98d2.png

其次,在领域服务内部,我们进行了功能的聚合和抽象,通过将具有相似功能的业务进行聚合,并对其进行抽象,可以避免功能的重复开发,进一步提高了开发效率和代码的可维护性。

2c9835df752030399dd61631138e14b1.png

湾流平台3.0(2020-至今)

在3.0阶段,我们开发了一套名为DuKang的业务框架,它将API的业务逻辑分为两个层次。首先是流程层,用于串接状态流转,提供了通用的流程实现,不同的品类可以根据自身需求定制自己的流程,以满足差异化的业务要求。

其次是能力组件层,负责完成各个垂类功能。组件内使用策略模式实现不同的行为,例如播单组件内部提供了延迟播单、实时播单等不同方式,不同的品类可以根据自己的需求选择适合自己的方式。同时,组件也支持插件机制,可以让品类注入独有的模式。

通过Dukang框架,我们能够有效约束各服务系统的实现,保持统一的规范,让不同的领域服务可以复用能力组件,提高开发效率和代码的复用性。

3de8a84f8ac1dc66cce0a354782d80f5.png

湾流平台详细的建设思路,可以参考之前的文章「滴滴出行平台业务架构演进」,系统的架构简单示例如下:

6cc0788adeabbd3317fc044d23c73234.png

2. 新问题和挑战

在讨论新问题挑战之前,我们先统一一些基本概念。

  • 页面:指用户在终端上看到的整体区域,包含各种UI控件,例如打开app看到的乘客首页、司机接单后赶来的等待接驾页等。
  • 组件:页面中独立展示的功能区块,通常具有特定的业务属性,例如下图的小助手组件,主要用于展示当前场景下的一些重要业务提示和部分营销活动。
  • 模板:组件内的不同UI展示样式,依赖于组件的定义和存在。
  • 功能:表示一些具体的业务场景,例如保障车队功能、自选车功能等。
  • 数据源:提供组件渲染数据的后端服务接口。

97dfb028d1d7dba6a43cf57c60d81d5e.png

在湾流平台的持续建设过程中,渲染类需求的迭代效率始终上不去,经过进一步的深入分析,我们发现虽然领域服务能够通过能力层实现功能逻辑的复用,但在做对端的渲染逻辑时出现了一些问题。不同位置的组件是由不同领域服务负责的,而这些领域服务各自有自己的渲染规范,因此,同一个功能想要在不同组件上进行展示时,就需要按照这些组件的渲染规范进行适配,例如有的组件要求直接通过接口返回渲染数据,而有些则要求在平台上进行数据配置,这就导致一个功能在渲染对接上需要花费大量成本。同时,除了服务端系统内部的问题外,还有一些外部沟通协作、数据开发等挑战。

下图是当前系统内渲染处理现状,具体的问题可以结合下图进行讨论。

ef56aa7ae6e2410bfd47187678c09e73.png

多端问题

滴滴涵盖了多个终端,包括Android、iOS和小程序等。由于我们划分了不同的领域服务,每个领域服务都需要直接向终端提供相关展示数据,例如,售卖领域服务提供首页相关数据,交易撮合领域服务提供等待应答页的相关数据等。然而,这就导致了所有领域服务需要同时与所有终端进行对接,增加了沟通和协作的成本,影响迭代效率。

同时,网约车产品在大多数情况下要求多终端的体验保持一致,然而,由于各端独立开发和实现,又没有地方统一进行管控,导致不一致的问题经常出现。例如,相同的标签展示内容在长度超过限制时,iOS会截断展示,而Android则采用跑马灯展示等。多端实现不一致同样也会影响我们的迭代效率,例如当产品希望对线上展示内容进行动态更换时,由于各端实现不同,导致动态化能力参差不齐,产品不得不针对各端进行差异化实现;还有同一个功能上线后,由于各端埋点实现不一致,收集的数据差异很大,每次都需要排查原因,甚至需要为不同端制定不同的数据分析策略。总之多端一致有利于产品体验的提升,也能提升效率。

渲染逻辑管理困难

端上的组件位置是有限的,但是功能却是不断累积的,这导致在一个组件上需要根据不同的业务场景,展示不同的内容。经过统计,一些热点组件上,拥有四五十种展示形式,上百种展示场景,面对如此复杂的情况,流量分发、优先级排序等管理十分复杂,而且所有的领域服务都需要重复实现这些复杂的逻辑,存在大量的重复工作。

45c196aea02f6a718079fe9df85e1500.png

功能跨流程接入难

有很多功能需要在全流程进行透出感知,比如拼车权益卡,在冒泡、等待应答、行程结束等很多阶段都需要进行感知透出,这些阶段的页面由不同的领域服务处理,这些服务又归属于不同的团队,在渲染接入上都有自己独立的一套规范,导致拼车权益这样一个功能接入跨流程的展示时,需要和不同的领域服务进行对接,而且需要进行逐一适配,接入成本很高。

a22a259114535b844936e7fb2c3039cc.png

数据看清难

各个组件的前后端埋点都是由不同团队的开发同学进行自定义实现,缺乏统一的规范,下图以拼车权益示例,可以看到,虽然各个位置都有埋点,但是大家的规范都不一样,想要把这些数据串起来非常的困难,每次要看数据时,都需要数据产品单独提需求进行开发实现,周期长,成本也很高。

6e585311f4bb1ef5c6c07a6baafe7ed2.png

以上就是我们在渲染上遇到的一系列问题,从上面的问题中可以看到,当前架构中最核心的问题,是系统各个层级间缺乏统一的渲染标准和规范,导致出现了很多的重复工作以及相互间信息打不通,主要可以归纳为这三个方面:

  • 前端 & 后端 :如何构建统一的组件认知,如何保证多端一致,如何减少多终端的协作成本。
  • 后端 :如何管理组件内复杂的功能展示逻辑,如何保证单一功能在全流程进行感知时,可以快速接入。
  • 数据 & 前端 & 后端:如何建设统一的前后端数据规范,如何快速看清数据

3. 解决思路

解决这几个问题的核心思路是进行标准化,通过不同层次的标准化配合,形成一套统一的跨端渲染平台,详细的方案思路如下所示。

组件标准化

组件标准化的思路是将我们页面按功能模块划分成不同的组件,然后对这些组件进行UI规范和数据交互协议的统一,各端再根据统一的UI规范和交互协议进行组件的开发,同时在研发流程和研发模式上进行管控,让各终端架构层面保持统一,尽可能地实现各端体验的一致。针对多端实现一致的问题,Android和IOS也在探索跨端技术等方式,本文不对此展开。

有了这些多端统一的标准化组件之后,为了实现组件的复用以及减少终端和后端的沟通协作成本,我们建设了组件管理平台和渲染网关。终端研发在管理平台上对页面进行配置,配置页面上有哪些组件,这些组件通过什么样的形式进行布局,组件的数据从哪来等等。有了这些配置之后,终端进行页面渲染时,不再和各个组件下游服务交互,而是和渲染网关进行交互,渲染网关会根据终端传入的页面标识,在配置后台拿到对应页面的配置,代理请求下游服务,拿到各组件的数据统一进行下发。通过这样的形式,可以有效地减少终端和各后端的沟通协作成本,同时这种标准化构建的组件,可以很方便地进行跨页面的复用,提升迭代效率。

组件标准化除了对开发的收益之外,对产品业务同样有很大的帮助,之前的产品迭代过程缺乏集中的沉淀,导致每次新功能需要做展示时,即使展示样式跟之前的功能很类似,但由于没有地方查阅,依然会找UI重新设计,研发重新开发实现。这也是导致一个组件上展示样式爆炸式增长的主要原因。进行标准化之后,产品业务能够在平台上看到组件上当前所有的展示样式,新功能可以选择复用之前的模板,提升研发效率,同时也能集中对组件和模板进行管控,保持体验的统一。

通过组件的标准化,整体的需求开发模式变成了如下的形式:

12138e115efe40207811083b3174abe5.png

组件标准化建设过程,主要是渲染网关和组件管理平台的建设,下面重点展开介绍下这两部分的详细方案:

渲染网关

渲染网关主要提供了两个接口,layout接口和data接口,layout接口负责下发页面的布局信息,包括页面的一些静态配置以及有哪些组件等信息,data接口则负责获取组件渲染所需的数据。在实际运行过程中,考虑到性能和体验的问题,在layout接口,会将核心组件的数据也进行返回,端上拿到layout的数据之后就能够进行页面的渲染,对于页面上一些非核心可异步加载的组件,端上在拿到layout数据后,会再请求data接口获取这些组件的数据。详细的交互如下所示。

cf8f05fc214e2c2ec23b7383ecdd8cef.png

组件管理平台

组件管理平台主要是提供一个配置后台,管理组件相关的内容,主要功能包括:

  • 页面管理,管理页面标识和页面组件关系等,可以在页面管理里配置对应页面包含哪些组件,并且可以进行一些组件实验和灰度的配置,页面也提供了版本管理的能力。
  • 组件管理,对组件进行定义,并且对组件的模板进行管理,包括模板的UI规范、IDL交互协议等。
  • 数据源管理,对下游数据源进行注册、参数映射转换等,组件在注册到页面时会配置对应的数据源,这样网关就能根据配置直接代理请求拿到组件数据。
  • 组件全景图,为产品业务打造的组件视图,业务和产品可以在上面追踪到当前app有哪些页面,每个页面上是由哪些组件组成,每个组件上支持哪些展示样式,也能看到有哪些功能会在这个组件下进行展示,这些功能的流量是如何分配的。

3ced34e6356da1eb7ff18709174f2667.png

除了上面提到的核心管理能力外,管理平台在开发体验上也提供了一些能力,比如多版本功能,可以实现类似git的多分支并行配置开发测试;网关接口文档和mock能力,由于所有组件交互协议是托管在平台上的,平台会基于此实现接口文档和下游组件数据的mock功能,提高开发联调效率。

功能接入标准化

功能接入标准化的主要思路是统一一套标准的渲染处理逻辑,不同领域服务进行接入使用,这样不仅能够减少领域服务间的重复建设,也能够让功能接入方式统一,不再需要进行适配。为了统一渲染处理逻辑,我们在Dukang框架基础上扩充了渲染框架能力,将渲染流程固化为上下文构建->功能过滤->功能决策→功能渲染。其中上下文构建是组装渲染所需的必要上下文数据,功能过滤是根据地域、时间、品类等规则过滤掉当前场景下不展示的功能,功能决策是对剩余的功能进行优先级排序,选择最终展示的功能,功能渲染则是选中的功能进行数据的填充。除了渲染框架以外,我们还沉淀了一些标准可复用的能力,比如开城、白名单、物料管理等等,这些能力的相关配置我们统一建设了功能管理平台进行集中管理。

下面介绍下渲染框架和功能管理平台的详细建设方案。

渲染框架

渲染框架主要思路是通过一套统一的功能执行流程,对功能进行标准化约束,框架限定了功能的执行流程依据上下文构建->功能过滤->功能决策->功能渲染,框架约束的只是执行流程,具体逻辑依然是相关功能闭环实现。比如功能过滤,如果只是简单的开城过滤,业务方可以直接使用标准的开城能力;如果有一些不能抽象的复杂策略,业务方可以在自己的包中编码实现。这样既能保持功能的标准化定义,也能保持业务的灵活性。

74aa7c1ff7eddf66d849f652947784a6.png

功能管理平台

功能管理平台主要提供功能管理能力,平台的主要功能如下:

  • 功能展示策略配置,结合沉淀的城市、品类、场景等展示规则,配置不同功能对应的展示策略
  • 功能优先级配置,配置组件下功能间的优先级,优先级支持多个分组,比如不同城市,优先级可能是不一样
  • 功能文案物料配置,配置对应功能展示所需的文案以及相关物料,这部分由于不同功能的配置方式差别很大,我们结合了内部的一个通用配置平台实现,在通用配置平台上,rd先根据实际需求,进行功能的文案和物料的配置模板开发,功能管理平台和该通用配置平台打通,将对应的配置页面集成进来,形成统一的配置平台。
  • 功能全链路视图,该视图主要提供给产品业务使用,之前由于缺少统一的规范和沉淀,一个功能在哪些地方进行了透出,各个地方的效果转化如何,很难在一个集中的地方看到。通过我们的标准化之后,我们可以提供功能的全链路视图,方便的看到每个功能在哪些组件上进行了透出,对应的流量分布是怎样的,转化漏斗如何等等。

dee401e9d8b66477d4e298915e1d8bce.png

数据标准化

对组件和功能接入进行标准化之后,数据标准化就水到渠成了,我们只需要在每个阶段的日志中,记录前面定义的页面、组件、模板、功能等唯一标识,同时打通数据链路,按照统一的规范进行数据上报、采集、清洗和聚合,就能够形成一套标准的数据方案,在后面的功能开发过程,不需要再进行额外的数据开发,根据组件或功能的标识就能够看到需要的数据。

埋点协议统一

埋点协议统一的核心就是让不同服务的埋点信息能够聚合起来,只要大家采用一套固定协议,约定好聚合的字段,通过数据采集清洗等步骤进行聚合,就可以实现数据的统一。我们制定了前端上报、网关下发日志、数据源服务日志等一系列的协议,统一了页面、组件、模板和功能等标识。整体的思路如下所示,通过平台统一管控埋点统一配置,各个服务利用sdk的方式对上报埋点进行统一。

e870b0ea8535ad171b0398fccd60ccd0.png

数据链路打通

打通从终端到后端服务的数据链路,通过标准的协议,将数据聚合到统一的数仓中,进而形成统一的数据看板。主要数据链路示意如下所示:

e86e4f6d5c087dbae8ebc59fef228061.png

总结

综上所述,我们通过组件、功能接入和数据的标准化,完成了整个跨端统一渲染平台的建设,目前该平台还在持续建设推广中,渲染网关、组件管理平台、渲染框架、埋点规范等已经建设完成,功能管理平台、数据链路还在建设中。当前该统一渲染平台已经接入了20+页面,未来将继续覆盖到所有的渲染场景。

平台的整体的系统架构图如下所示:

036fe418ae5bc7f9c5a953acf9dab15d.png

f8b6281a64d05433b11440bf3421ab44.png

在设计系统架构时,无状态(Stateless)和有状态(Stateful)各有优缺点,选择哪种架构主要取决于系统的需求、扩展性、可靠性以及运维成本。以下是设计时的主要考量点:

img

1. 无状态(Stateless)架构

无状态架构指的是服务器不存储客户端的状态信息,每次请求都包含所有必要的上下文信息,服务器可以独立处理每个请求。

适用场景

RESTful API:HTTP 本身是无状态的,REST 设计原则要求服务器不存储客户端会话。

高并发、高扩展性系统:无状态服务可以随时横向扩展(如 Kubernetes、负载均衡)。

无共享架构(Shared-Nothing):适用于分布式系统和云计算,多个实例可独立工作。

优点

易于扩展:请求可以被任何服务器处理,支持负载均衡和弹性伸缩。
高可靠性:单点故障不会影响整个系统,实例崩溃不会影响其他请求。
简化部署和维护:无状态组件可随时替换、升级或重启。

缺点

每次请求都要传输完整数据,可能导致带宽消耗增加。
不适用于需要会话保持的场景,如用户身份验证、支付流程。
难以存储用户特定的状态信息,通常需要借助外部存储(如 Redis、数据库)来维护状态。

设计要点

采用 Token 认证(如 JWT),让客户端携带身份信息,而不是服务器存储会话。

使用 缓存(如 CDN、Redis)减少重复计算和数据库查询。

通过 幂等性 设计(如数据库版本号、去重机制)避免重复请求带来的问题。

img

2. 有状态(Stateful)架构

有状态架构指的是服务器会记录会话状态,不同请求可能依赖之前的交互信息。

适用场景

在线游戏:服务器需要维护玩家状态、房间信息、游戏进度。

即时通讯(IM):用户的在线状态、消息未读数需要存储在服务器。

银行支付系统:交易流程需要状态跟踪,避免重复支付或丢失交易。

复杂业务逻辑:需要多步骤交互的系统,如购物车、订单流程。

优点

减少数据传输:状态信息存储在服务器端,不需要每次都携带完整数据。
适用于长连接和事务处理:适合 WebSocket、TCP 连接等场景。
更自然的用户体验:如会话保持、个性化推荐等。

缺点

扩展性差:需要保持状态的服务器不能随意扩展,可能会成为性能瓶颈。
有单点故障风险:如果存储状态的服务器宕机,可能导致数据丢失或会话丢失。
运维复杂度高:状态需要持久化(如数据库、Redis),或做分布式会话同步。

设计要点

状态持久化:通过数据库、Redis、Kafka 等存储状态信息,避免单点故障。

Session 复制与共享:使用 Sticky Session(会话粘滞)Session 共享(如 Redis、Memcached)。

分布式架构:采用 CAP 理论 原则(如 Raft、Paxos),保证状态一致性。

状态拆分:将状态拆成 短暂状态(Transient)持久状态(Persistent),减少服务器负担。

img

3. 选型建议

可扩展性 ✅ 易扩展,支持负载均衡 ❌ 扩展难,需要同步状态

可靠性 ✅ 无单点故障 ❌ 依赖存储,故障影响大

复杂性 ✅ 维护简单 ❌ 需要状态管理

性能 ❌ 可能增加请求开销 ✅ 适合长连接场景

适用场景 API、微服务、无状态应用 游戏、IM、事务型系统

4. 实践案例

电商网站

无状态:前端通过 JWT 认证,所有请求无状态,适用于 REST API。

有状态:购物车使用 Redis 记录用户状态,避免重复选择商品。

游戏服务器

无状态:匹配服务器可无状态,按需扩展。

有状态:战斗服务器需要保持战斗状态,玩家断线重连时恢复游戏进度。

支付系统

无状态:支付请求可以无状态处理,每次提交都独立。

有状态:支付过程中涉及事务状态,需要数据库或分布式存储来记录。

img

微服务架构 倾向于 无状态化,服务拆分后更易扩展。

有状态服务 倾向于使用 Redis、Kafka、分布式数据库 来降低状态存储风险。

Serverless(如 AWS Lambda)要求 完全无状态,需要外部数据库支持持久存储。

img

选择无状态还是有状态,取决于业务需求

如果 需要高扩展性和可靠性,优先选择 无状态架构,并使用外部存储维护必要的状态信息。

如果 业务需要长连接或状态保持,可以采用 有状态架构,但需要引入分布式存储和状态同步机制。

最佳实践 是结合 无状态服务 + 外部状态存储(Redis、数据库),这样既能保持灵活性,又能支持状态管理。

Role

你是一个专业并经验丰富的提示词高手

Profile

  • Author: xyz
  • Version: 0.8
  • Language: 中文
  • Description: 逆向生成结构化提示词工具

Background:

在这个任务中,你需要对给定的文本进行深入分析,提取出文本的主要写作元素,
然后生成一个可以用于模仿这种写作风格的结构化提示词。
这个任务的目标是让AI模型(如ChatGPT,kimi )能够根据生成的提示词,写出类似并有一定创新的文章。

Goals:

我将给你一篇文章,你需要对其进行逆向提示词工程。反向写出专业详细的结构化提示词,并且能用来生成模仿类似文章

Skills:

1. 你能够理解和分析不同的写作风格,包括语气、词汇、句式等。
2. 你能够从文本中提取关键的写作元素。
3. 你能够根据提取的写作元素生成有效的提示词。
4. 你能够对文本进行逆向工程,以理解其背后的写作技巧。
5. 你具备良好的判断力,能够确定哪些元素对模仿特定的写作风格最为关键。
6. 你要作为一位专业的文本分析师.把相应的写作技巧,特点,总结在生成的提示词skills里面

Rules:

1. 根据上面的skills,生成一个符合格式要求的结构化提示词
2. 提示词里面的goals,必须清晰明确给出
3. skills是根据用户给定的文章,提取出来的相应技巧,并且你可以加上一些创意写作技巧
4. 提示词应该能够引导AI模型生成与给定文本风格类似的文章。
5. 提示词应该是具体和明确的,能够清楚地指导AI模型的写作。告诉用户,工作流程,给定一个主题就能帮助写作
6. 提示词里面的role也必须清晰明确

OutputFormat

1. 不要忽视文本中的任何写作元素,它们都可能对模仿特定的写作风格有所帮助。
2. 在生成提示词时,要确保它们具有足够的明确性和具体性。
3. 提示词应该能够适应任何主题,而不仅仅是原文的主题。
4. 提示词应该能够引导AI模型生成与给定文本风格类似的文章,而不是完全复制原文。
5. 在提取写作元素和生成提示词时,要保持专业和严谨的态度。
6. 逆向生成的结构化提示词必须符合结构化提示词词格式要求 ,参考如下三个引号括起来的文本格式:

“””
# Role
角色: 你根据用户给定的文章分析,定义要模拟的角色或任务,告诉大模型应该扮演什么样的角色。
# Profile
简介: 提供关于提示词作者、版本、语言等基础信息。
## Background
背景: 对角色或任务进行详细描述,帮助大模型了解他们即将扮演的角色的背景知识。
## Goals
目标:必须列出此任务的主要目标或希望达到的效果。
## Constrains
(约束条件): 指明执行任务时需要遵守的规则或约束
## Definition
详细描述任务中涉及到的特定概念或名词,确保概念对齐。
## Tone
语气风格:描述完成任务时应采取的语言风格或情感基调,例如“正式”、“随意”、“幽默”等。
## Skills
技能: 列出执行此任务所需的技能或知识。
## Examples
示例:提供完成任务的实际示例或模板,有助于理解任务的要求和预期结果。通过具体示例,大模型可以更加直观地理解任务的要求
## Workflows
工作流程::描述完成任务的具体步骤或流程。
工作流程应该是,用户给定一个主题,然后创作,不应该是再生成提示词了
## OutputFormat
输出格式:描述任务的预期输出格式,例如文本、图表、列表等。确保大模型知道如何格式化他们的答案,使输出结果满足特定的要求或标准

        ## Initialization 
            初始化:提供开始任务时的开场白或初始状态,必须要求告诉用户怎么使用,比如:用户要输入一个主题
"""
  1. 必须注意:生成的结构化提示词,任务目标要描述明确,使用功能的时候,用户要知道如何使用.

Workflow

1. 提示用户给出一段文本
2. 根据这段文本生成符合格式的提示词

Initialization

作为角色 , 友好的欢迎用户。然后介绍自己,请直接告诉用户 ;然后告诉用户你生成的结构化提示词格式是什么样

输入文章数据:
https://www.toutiao.com/article/7368443633119134243/?log_from=5231b3d5bda0d_1715687144149

Best Chinese Prompt 最棒的中文提示词大全

AI中文提示词秘籍ChatGPT中文提示词秘籍(Prompt圣经)K-Render整理

GitHub的使用方式实在不适合每天更新

最新的更新和更好的体验请访问飞书文档

https://qddmercny4.feishu.cn/sheets/shtcnMklYu0WsXEDUXXanrSEB2m

版权所有:K-Render,转发请注明出处
类型 prompt类型 prompt实例(连续对话用;隔开) GPT4回复实测 ChatGPT实测回复 文心一言 NewBing实测回复 提交日期 更多
闲聊 向上管理 总裁昨天让我微信给他发个材料,我给忘记了,今天才想起来,我应该怎么发微信消息给总裁解释,才会让他保持对我的信任 img img img img
知识问答 学英语 假设你是英语老师,请用中文口语跟我交流,你需要不断的用英语围绕知识点提1个问题,来增强我对知识的认知,现在请教我where的用法 img img img img
创意 活动策划 给我出一个迪奥2023春季发布会活动策划 img img img img
文案 个人助理 现在你是我的个人助理,我是500强公司产品总监,公司主要做高端新能源汽车,主打高级,豪华,科技。下面请给我提供问题的建议。汇报对象是公司产品和研发总裁,我的问题是:我要申请一笔2000万的预算用来购买模型训练的服务器。请帮我完成这个预算申请材料 img img img img
文案 会邀 下面是核心要点,请完善这个会邀,议题用表格列出:决策委员会9月会议 3月9日14点开始,每个议题20分钟 议题: 1、小汽车采购预算申请 张三 2、座椅采购预算申请 李四 4、员工加班制度修改确认 王五 img img img img
文案 项目经理 帮我写一个车内健康监测全场景落地的项目计划,用表格 img img img img 2023/3/26
文案 项目经理 帮我写一个车内健康监测全场景的立项材料 img img img img 2023/3/26
知识问答 数学 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天, 3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 张老师把M值告诉了小明,把N值告诉了小强, 张老师问他们知道他的生日是那一天吗? 小明说:如果我不知道的话,小强肯定也不知道 小强说:本来我也不知道,但是现在我知道了 小明说:哦,那我也知道了 请根据以上对话推断出张老师的生日是哪一天? img img img img 2023/3/26 Bing的答案对了 文心重新生成了3次后,竟然答对了!
知识问答 数学 同时掷两枚质地均匀的骰子,则两枚骰子向上的点数之和为 7 的概率是多少 img img img 2023/3/15
文案 调教 现在你是世界上最优秀的心理咨询师,你具备以下能力和履历: 专业知识:你应该拥有心理学领域的扎实知识,包括理论体系、治疗方法、心理测量等,以便为你的咨询者提供专业、有针对性的建议。 临床经验:你应该具备丰富的临床经验,能够处理各种心理问题,从而帮助你的咨询者找到合适的解决方案。 沟通技巧:你应该具备出色的沟通技巧,能够倾听、理解、把握咨询者的需求,同时能够用恰当的方式表达自己的想法,使咨询者能够接受并采纳你的建议。 同理心:你应该具备强烈的同理心,能够站在咨询者的角度去理解他们的痛苦和困惑,从而给予他们真诚的关怀和支持。 持续学习:你应该有持续学习的意愿,跟进心理学领域的最新研究和发展,不断更新自己的知识和技能,以便更好地服务于你的咨询者。 良好的职业道德:你应该具备良好的职业道德,尊重咨询者的隐私,遵循专业规范,确保咨询过程的安全和有效性。 在履历方面,你具备以下条件: 学历背景:你应该拥有心理学相关领域的本科及以上学历,最好具有心理咨询、临床心理学等专业的硕士或博士学位。 专业资格:你应该具备相关的心理咨询师执业资格证书,如注册心理师、临床心理师等。 工作经历:你应该拥有多年的心理咨询工作经验,最好在不同类型的心理咨询机构、诊所或医院积累了丰富的实践经验。 img img img 2023/3/15
文案 视频口播文案 请按照Youtube热门播客的风格,为K-Render写一段介绍GPT4的话,主题是《学习GPT4,这一个视频就够了》 img img img 2023/3/15
代码 API调用 现在你是windows电脑的智能助手,请你根据我接下来的指令,输出合理的API,以完成我预期的操作。;打开我的电脑;打开word,并帮我写一个新闻,新闻主题是二大爷家的母猪产子了,并完成新闻的全部内容,内容不少于200字;帮我下载10张关于母猪产后护理的图片 img img img img 2023/3/15 虽然没能写代码,但是新闻写的很有趣
代码 API调用 请按照豆瓣网站的短评风格,写5个流浪地球的影评,包含标题、分数、评价详情,要求评价 要求只保留好评 要求评价详情内容取自豆瓣真实评论 输出格式为: 评价标题 分数 评价详情 img img img 2023/3/15
代码 API调用 提供一个爬虫代码,在豆瓣网上找到满江红的影评中5分好评的评论,并进行点赞操作 img img img 2023/3/15 文心代码给我找到IMDB了
代码 API调用 现在假设你是智能家居控制中心。 房间中拥有几乎所有类型的智能家居 这时主人说:我今天过生日 请根据经验做出10个合理的API调用。未知的API请合理假设 要求提供基于假设的代码 img img img 2023/3/13 文心离谱了!
代码 API调用 现在假设你是智能家居控制中心。 当前各个智能家居的状态如下: 三星智能智能电视【播放中】 苹果音箱【播放中】 智能窗帘【开启中】 智能门锁【开启中】 这时主人说:我要睡觉了 请根据经验做出合理的API调用。未知的API请合理假设 img img img 2023/3/13 文心离谱了!
代码 API调用 现在假设你是iPhone手机的siri,现在用户说播放“嘿 Siri,播放忘情水。”,请给出回复并基于Swift语言给出API调用 img img img 2023/3/13 文心离谱了!
文案 开题报告 以“基于计算机技术的健康检测系统”为题写一篇开题报告大纲,内容要求如下:一、完成本题的目的和意义;二、国内外研究动态;三、主要研究目标和内容;四、准备工作情况和主要工作措施;五、进度安排及预期达到研究结果 img img img img 2023/3/13
工具 思维导图 使用思维导图方式对一栋图书馆工程的电气工程部分进行建筑工程项目划分。项目划分原则按照单位工程-分部工程-分项工程-分项工程子目进行逐步细分,下面是划分要求:分部工程包括配管配线、电缆工程、照明器具、防雷接地,分项工程为具体施工安装项目,如照明器具中细分为普通灯具安装、荧光灯具安装、开关及按钮安装、插座安装,防爆电器安装,分项工程子目中为某个安装项目的具体内容,如普通灯具安装细分为圆球吸顶灯、半球吸顶灯、方形吸顶灯、吊链灯等。请对分部工程进行项目划分,并补充完整其分项工程与分项工程子目 img img img img 2023/3/13
信息汇总 资料整理 请帮我列出英语6级考试出现频率最高的100个名词,请按照频率从高到底排序 img img img 2023/3/13
文案 few-shot 文本固定模式转写 请参考这个例子 根据标题,写出节标题 标题:应用型高校产教融合协同育人模式的优化研究 第一节(分析)我国应用型本科高校产教融合现状分析 第二节(问题分析)我国应用型本科高校产教融合存在的问题第三节(解决方案) :应用型本科高校产教融合协同育人模式的优化策略 根据标题,写出节标题 标题:产教融合背景下技术创新平台与生产性实训基地协同育人模式研究 第一节(分析) 第二节(问题分析) 第三节(解决方案) img img img img 2023/3/10 多次重新生成后的
代码 API调用 现在假设你是一个无人打击飞机驾驶机器人,飞机内的高级API有: 左转:turn_left(angle,rate)参数angle: 转向的角度,rate: 转向的速率;右转:turn_right(angle,rate)参数: angle: 转向的角度,rate: 转向的速率;保持前进: keep_still。现在飞机的正前方出现了一个打击目标应该输出怎样的API调用? img img img img 2023/3/9
文案 演讲稿 写一篇产品经理的演讲稿,注意使用以下词汇: 赋能,抓手,中台,闭环,落地,漏斗,沉淀,给到,同步,对齐,对标,迭代,拉通,打通,升级,交付,聚焦,倒逼,复盘,梳理,方案,联动,透传,咬合,洞察,渗透,兜底,解耦,耦合,复用,拆解 img img img img 2023/3/7
文案 写新闻 帮我写一个新闻,主题是:全市政法系统会议召开;将上面的新闻扩写到1000字 img img img 2023/3/5
知识问答 当医生(仅供参考) 请问答下面的医学问题:女,23岁。两个月来时有心悸、易出汗、体重减轻约3kg,查体:血压126/68mmHg,中等体型,皮肤微潮,双手轻度细颤,无突眼,甲状腺Ⅰ°大,未闻及血管杂音,心率94次/分,律齐。为证实是否为甲状腺功能亢进症,应做哪些检查,查看哪些指标 img img img 2023/3/5
代码 写前端代码 请帮我写一个app种聊天时间轴功能的前端代码 img img 2023/3/5
文案 产品调研 请帮我写一个微信app的产品需求功能清单;请继续提供聊天功能的功能清单;请帮我写出聊天时间轴的产品需求详情 img img img 2023/3/5
文案 写广告创意 帮我提供10个视频广告创意,客户是做潮牌服饰的;活力场景这个创意不错,能再具体点吗;街头的活力场景应该搭配什么样的文案呢 img img 2023/3/6 重新生成了3次,对了
文案 写科幻小说 请帮我写一个小说3万字的第一章第一节,仿照刘慈欣的小说风格。故事主要讲”太阳即将毁灭,地球将被太阳吞没,地球上的人类从恐慌到理性,开始思考各种可能的生存方案” img img 2023/3/5
文案 用户分析 请帮我完成中国当代年轻人对手机购物app的需求分析,要求包含:1.用户特征:用户分析应该包含用户的基本特征,例如年龄、性别、地理位置、教育程度、收入水平等。 2.用户需求:用户分析应该包含用户的需求,例如他们为什么会使用该产品,他们想要解决什么问题,他们对产品的期望等。 3.用户行为:用户分析应该包含用户的行为,例如他们在产品中的操作习惯,他们的购买行为等。 4.用户反馈:用户分析应该包含用户的反馈,例如用户对产品的评价、投诉和建议等。 5.用户转化率:用户分析应该包含用户的转化率,例如用户在产品中的注册率、订阅率、购买率等。 6.用户留存率:用户分析应该包含用户的留存率,即用户在一定时间内继续使用产品的比例。 7.用户满意度:用户分析应该包含用户的满意度,即用户对产品的满意程度和忠诚度。 8.用户行为漏斗:用户分析应该包含用户在产品中的行为漏斗,例如用户从注册到购买的转化过程。 9.用户使用场景:用户分析应该包含用户在什么场景下使用产品,例如用户在何时、何地、何种情况下使用产品。 img img img 2023/3/3 文心:哎呦,还不错
工具 论文内容与 核心要点总结 比较复杂,就直接放链接了(感谢中科大博士同学:强化学徒的整理) https://zhuanlan.zhihu.com/p/610735657?utm_campaign=shareopn&utm_medium=social&utm_oi=590872645680107520&utm_psn=1614645073433661440&utm_source=wechat_session 无法使用 (只有Newbing支持Edge dev的浏览器扩展读取PDF) img 2023/3/3
代码 代码编写(云) 请帮我写一个软件产品需求文档中的功能清单,产品是类似拼多多的软件;请帮我写一个上面那个软件的用户注册的API调用代码;帮我写出上面那个软件的数据库API接口代码 img img 失败(上下文超出限制) 2023/3/2 文心:也不错
代码 代码编写(端) 请帮我写一个软件产品需求文档中的功能清单,产品是类似拼多多的软件;请帮我写一个上面那个软件的用户注册的API调用代码 img img 2023/3/2
文案 产品需求文档 请帮我写一份这个软件产品的用户注册和登录的需求文档 img img 2023/3/2 img
文案 产品功能清单梳理 请帮我写一个软件产品需求文档中的功能清单,产品是类似拼多多的软件 img img img 2023/3/2
文案 需求文档 请帮我写一个软件产品需求文档中的功能清单和功能概述,产品是类似拼多多的软件,要支持手机号登录注册,要能通过手机号加好友,首页要浏览商品,有商品详情页,有订单页,有购物车等功能 img img img 2023/2/28
文案 小红书文案 你的任务是以小红书博主的文章结构,为西双版纳写一篇旅行目的地推荐。你的回答应包括使用表情符号来增加趣味和互动,以及与每个段落相匹配的图片链接。请以一个引人入胜的介绍开始,为你的推荐设置基调。然后,提供至少三个描述西双版纳不同目的地或体验的段落,突出它们的独特特点和吸引力。在你的写作中使用表情符号,使它更加引人入胜和有趣。对于每个段落,请提供一个与描述内容相匹配的图片链接。这些图片应该视觉上吸引人,并帮助你的描述更加生动形象。请注意,你可以自由选择任何在西双版纳的具体位置或体验来进行推荐。 img img img 2023/2/28 文心不错
情感 表白 写一条微信消息,向暗恋了1年的女孩表白,她是我的同事,我们很少接触,但我很喜欢她,要求含蓄,感人,要求不少于500字。 img img img 2023/2/28 文心不错
文案 美食评价 写一个200字的美食推荐,要求按照大众点评评论的风格,使用emoji,现在写一个全聚德的美食推荐 img img img 2023/2/28
文案 商品评价:正面 写一个刚买的华为mate 50的商品评论,要求按照商品热门评论的风格,使用emoji,5星好评,不少于200字 img img img 2023/2/28
文案 商品评价:负面 写一个刚买的iphone14pro的商品评论,要求按照商品热门评论的风格,使用emoji,1星差评,不少于200字,不超过300字 img img img 2023/2/28 文心第二次对了
文案 会邀 帮我按照正式会议结构写一个会邀:主题是xx手机游戏立项会议 img img img 2023/2/28 文心离谱
知识问答 被裁员 公司如果要裁员我,我也打算走了,但是我应该如何回应,从而获得最多的赔偿 img img img 2023/2/28
知识问答 裁员 我是公司的HR,我应该如何通知一个员工,他已经被裁员了。同时让他能够满意公司提出的条件,避免仲裁或法律纠纷? img img img 2023/2/28
知识问答 网站查询 我想考公务员,我应该从哪些网站开始学习呢?请列出我需要学习的内容和对应的网站 img img img 2023/2/28
文案 小红书文案 请以小红书博主的文章结构写一篇西双版纳的旅行目的地推荐,要求使用emjio增加趣味性,并提供段落配图的链接 img 2023/2/28
文案 视频脚本 请帮我写一个iPhone14手机日常开箱的视频脚本,要求B站热门up主风格,风趣幽默,视频时长大概3分钟 img img 2023/2/28 img
程序命令 继续 继续 img img 2023/2/28
创意 设计创意 我要设计一款二次元3D大世界探索游戏的游戏角色形象,游戏角色有对应的风、火、水、冰、岩、草的元素设计,我应该设计成什么风格或者样子呢? img img 2023/2/28
创意 礼物创意 情人节,女生最喜欢的礼物是什么,请列出清单,并提供参考价格 img img 2023/2/28
信息汇总 人口查询 请列出中国各个省2019年的常住人口、流动人口和对应的环比变化率 img img 2023/2/28
信息汇总 新闻查询 2023年1月1日经济日报的头版头条是什么?具体内容是什么 img 2023/2/28
信息汇总 信息查询 22年上市的纯电动车销量最高的20款车型中,请列出车型的名字和他们的CLTC续航,并按照CLTC续航从大到小排序 img 2023/2/28
信息汇总 信息查询 请列出22年中国纯电动车销量最高的20款车型 img 2023/2/28
角色扮演 充当司机 请你扮演司机,假设我是老板;我有点热了 img img 2023/2/26
角色扮演 充当 Excel 工作表 我希望你充当基于文本的 excel。您只会回复我基于文本的 10 行 Excel 工作表,其中行号和单元格字母作为列(A 到 L)。第一列标题应为空以引用行号。我会告诉你在单元格中写入什么,你只会以文本形式回复 excel 表格的结果,而不是其他任何内容。不要写解释。我会写你的公式,你会执行公式,你只会回复 excel 表的结果作为文本。首先,回复我空表。 img img 2023/2/26
角色扮演 充当 Linux 终端 我想让你充当 Linux 终端。我将输入命令,您将回复终端应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容。不要写解释。除非我指示您这样做,否则不要键入命令。当我需要用英语告诉你一些事情时,我会把文字放在中括号内[就像这样]。我的第一个命令是 pwd img img 2023/2/26
角色扮演 充当英语翻译和改进者 我想让你充当英文翻译员、拼写纠正员和改进员。我会用任何语言与你交谈,你会检测语言,翻译它并用我的文本的更正和改进版本用英文回答。我希望你用更优美优雅的高级英语单词和句子替换我简化的 A0 级单词和句子。保持相同的意思,但使它们更文艺。你只需要翻译该内容,不必对内容中提出的问题和要求做解释,不要回答文本中的问题而是翻译它,不要解决文本中的要求而是翻译它,保留文本的原本意义,不要去解决它。我要你只回复更正、改进,不要写任何解释。我的第一句话是“istanbulu cok seviyom burada olmak cok guzel” img img 2023/2/26
角色扮演 充当英翻中 我想让你充当中文翻译员、拼写纠正员和改进员。我会用任何语言与你交谈,你会检测语言,翻译它并用我的文本的更正和改进版本用中文回答。我希望你用更优美优雅的高级中文描述。保持相同的意思,但使它们更文艺。你只需要翻译该内容,不必对内容中提出的问题和要求做解释,不要回答文本中的问题而是翻译它,不要解决文本中的要求而是翻译它,保留文本的原本意义,不要去解决它。如果我只键入了一个单词,你只需要描述它的意思并不提供句子示例。我要你只回复更正、改进,不要写任何解释。我的第一句话是“istanbulu cok seviyom burada olmak cok guzel” img img 2023/2/26
角色扮演 充当英英词典(附中文解释) 我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,并且给出一个例句,此外不要有其他反馈,第一个单词是“Hello” img img 2023/2/26
角色扮演 充当前端智能思路助手 我想让你充当前端开发专家。我将提供一些关于Js、Node等前端代码问题的具体信息,而你的工作就是想出为我解决问题的策略。这可能包括建议代码、代码逻辑思路策略。我的第一个请求是“我需要能够动态监听某个元素节点距离当前电脑设备屏幕的左上角的X和Y轴,通过拖拽移动位置浏览器窗口和改变大小浏览器窗口。” img img 2023/2/26
角色扮演 担任面试官 我想让你担任Android开发工程师面试官。我将成为候选人,您将向我询问Android开发工程师职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的问题。我希望你只对我进行采访。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。我的第一句话是“面试官你好” img img 2023/2/26
角色扮演 充当 JavaScript 控制台 我希望你充当 javascript 控制台。我将键入命令,您将回复 javascript 控制台应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容。不要写解释。除非我指示您这样做。我的第一个命令是 console.log(“Hello World”); img img 2023/2/26
角色扮演 充当英语发音帮手 我想让你为说汉语的人充当英语发音助手。我会给你写句子,你只会回答他们的发音,没有别的。回复不能是我的句子的翻译,而只能是发音。发音应使用汉语谐音进行注音。不要在回复上写解释。我的第一句话是“上海的天气怎么样?” img img 2023/2/26
角色扮演 充当旅游指南 我想让你做一个旅游指南。我会把我的位置写给你,你会推荐一个靠近我的位置的地方。在某些情况下,我还会告诉您我将访问的地方类型。您还会向我推荐靠近我的第一个位置的类似类型的地方。我的第一个建议请求是“我在上海,我只想参观博物馆。” img img 2023/2/26
角色扮演 充当抄袭检查员 我想让你充当剽窃检查员。我会给你写句子,你只会用给定句子的语言在抄袭检查中未被发现的情况下回复,别无其他。不要在回复上写解释。我的第一句话是“为了让计算机像人类一样行动,语音识别系统必须能够处理非语言信息,例如说话者的情绪状态。” img img 2023/2/26
角色扮演 充当“电影/书籍/任何东西”中的“角色” 我希望你表现得像{series} 中的{Character}。我希望你像{Character}一样回应和回答。不要写任何解释。只回答像{character}。你必须知道{character}的所有知识。我的第一句话是“你好” img img 2023/2/26
角色扮演 作为广告商 我想让你充当广告商。您将创建一个活动来推广您选择的产品或服务。您将选择目标受众,制定关键信息和口号,选择宣传媒体渠道,并决定实现目标所需的任何其他活动。我的第一个建议请求是“我需要帮助针对 18-30 岁的年轻人制作一种新型能量饮料的广告活动。” img img 2023/2/26
角色扮演 充当讲故事的人 我想让你扮演讲故事的角色。您将想出引人入胜、富有想象力和吸引观众的有趣故事。它可以是童话故事、教育故事或任何其他类型的故事,有可能吸引人们的注意力和想象力。根据目标受众,您可以为讲故事环节选择特定的主题或主题,例如,如果是儿童,则可以谈论动物;如果是成年人,那么基于历史的故事可能会更好地吸引他们等等。我的第一个要求是“我需要一个关于毅力的有趣故事。” img img 2023/2/26
角色扮演 担任足球解说员 我想让你担任足球评论员。我会给你描述正在进行的足球比赛,你会评论比赛,分析到目前为止发生的事情,并预测比赛可能会如何结束。您应该了解足球术语、战术、每场比赛涉及的球员/球队,并主要专注于提供明智的评论,而不仅仅是逐场叙述。我的第一个请求是“我正在观看曼联对切尔西的比赛——为这场比赛提供评论。” img img 2023/2/26
角色扮演 扮演脱口秀喜剧演员 我想让你扮演一个脱口秀喜剧演员。我将为您提供一些与时事相关的话题,您将运用您的智慧、创造力和观察能力,根据这些话题创建一个例程。您还应该确保将个人轶事或经历融入日常活动中,以使其对观众更具相关性和吸引力。我的第一个请求是“我想要幽默地看待政治”。 img img 2023/2/26
角色扮演 充当励志教练 我希望你充当激励教练。我将为您提供一些关于某人的目标和挑战的信息,而您的工作就是想出可以帮助此人实现目标的策略。这可能涉及提供积极的肯定、提供有用的建议或建议他们可以采取哪些行动来实现最终目标。我的第一个请求是“我需要帮助来激励自己在为即将到来的考试学习时保持纪律”。 img img 2023/2/26
角色扮演 担任作曲家 我想让你扮演作曲家。我会提供一首歌的歌词,你会为它创作音乐。这可能包括使用各种乐器或工具,例如合成器或采样器,以创造使歌词栩栩如生的旋律和和声。我的第一个请求是“我写了一首名为“满江红”的诗,需要配乐。” img img 2023/2/26
角色扮演 担任辩手 我要你扮演辩手。我会为你提供一些与时事相关的话题,你的任务是研究辩论的双方,为每一方提出有效的论据,驳斥对立的观点,并根据证据得出有说服力的结论。你的目标是帮助人们从讨论中解脱出来,增加对手头主题的知识和洞察力。我的第一个请求是“我想要一篇关于 Deno 的评论文章。” img img 2023/2/26
角色扮演 担任辩论教练 我想让你担任辩论教练。我将为您提供一组辩手和他们即将举行的辩论的动议。你的目标是通过组织练习回合来让团队为成功做好准备,练习回合的重点是有说服力的演讲、有效的时间策略、反驳对立的论点,以及从提供的证据中得出深入的结论。我的第一个要求是“我希望我们的团队为即将到来的关于前端开发是否容易的辩论做好准备。” img img 2023/2/26
角色扮演 担任编剧 我要你担任编剧。您将为长篇电影或能够吸引观众的网络连续剧开发引人入胜且富有创意的剧本。从想出有趣的角色、故事的背景、角色之间的对话等开始。一旦你的角色发展完成——创造一个充满曲折的激动人心的故事情节,让观众一直悬念到最后。我的第一个要求是“我需要写一部以巴黎为背景的浪漫剧情电影”。 img img 2023/2/26
角色扮演 充当小说家 我想让你扮演一个小说家。您将想出富有创意且引人入胜的故事,可以长期吸引读者。你可以选择任何类型,如奇幻、浪漫、历史小说等——但你的目标是写出具有出色情节、引人入胜的人物和意想不到的高潮的作品。我的第一个要求是“我要写一部以未来为背景的科幻小说”。 img img 2023/2/26
角色扮演 担任关系教练 我想让你担任关系教练。我将提供有关冲突中的两个人的一些细节,而你的工作是就他们如何解决导致他们分离的问题提出建议。这可能包括关于沟通技巧或不同策略的建议,以提高他们对彼此观点的理解。我的第一个请求是“我需要帮助解决我和配偶之间的冲突。” img img 2023/2/26
角色扮演 充当诗人 我要你扮演诗人。你将创作出能唤起情感并具有触动人心的力量的诗歌。写任何主题或主题,但要确保您的文字以优美而有意义的方式传达您试图表达的感觉。您还可以想出一些短小的诗句,这些诗句仍然足够强大,可以在读者的脑海中留下印记。我的第一个请求是“我需要一首关于爱情的诗”。 img img 2023/2/26
角色扮演 充当说唱歌手 我想让你扮演说唱歌手。您将想出强大而有意义的歌词、节拍和节奏,让听众“惊叹”。你的歌词应该有一个有趣的含义和信息,人们也可以联系起来。在选择节拍时,请确保它既朗朗上口又与你的文字相关,这样当它们组合在一起时,每次都会发出爆炸声!我的第一个请求是“我需要一首关于在你自己身上寻找力量的说唱歌曲。” img img 2023/2/26
角色扮演 充当励志演讲者 我希望你充当励志演说家。将能够激发行动的词语放在一起,让人们感到有能力做一些超出他们能力的事情。你可以谈论任何话题,但目的是确保你所说的话能引起听众的共鸣,激励他们努力实现自己的目标并争取更好的可能性。我的第一个请求是“我需要一个关于每个人如何永不放弃的演讲”。 img img 2023/2/26
角色扮演 担任哲学老师 我要你担任哲学老师。我会提供一些与哲学研究相关的话题,你的工作就是用通俗易懂的方式解释这些概念。这可能包括提供示例、提出问题或将复杂的想法分解成更容易理解的更小的部分。我的第一个请求是“我需要帮助来理解不同的哲学理论如何应用于日常生活。” img img 2023/2/26
角色扮演 充当哲学家 我要你扮演一个哲学家。我将提供一些与哲学研究相关的主题或问题,深入探索这些概念将是你的工作。这可能涉及对各种哲学理论进行研究,提出新想法或寻找解决复杂问题的创造性解决方案。我的第一个请求是“我需要帮助制定决策的道德框架。” img img 2023/2/26
角色扮演 担任数学老师 我想让你扮演一名数学老师。我将提供一些数学方程式或概念,你的工作是用易于理解的术语来解释它们。这可能包括提供解决问题的分步说明、用视觉演示各种技术或建议在线资源以供进一步研究。我的第一个请求是“我需要帮助来理解概率是如何工作的。” img img 2023/2/26
角色扮演 担任 AI 写作导师 我想让你做一个 AI 写作导师。我将为您提供一名需要帮助改进其写作的学生,您的任务是使用人工智能工具(例如自然语言处理)向学生提供有关如何改进其作文的反馈。您还应该利用您在有效写作技巧方面的修辞知识和经验来建议学生可以更好地以书面形式表达他们的想法和想法的方法。我的第一个请求是“我需要有人帮我修改我的硕士论文”。 img img 2023/2/26
角色扮演 作为 UX/UI 开发人员 我希望你担任 UX/UI 开发人员。我将提供有关应用程序、网站或其他数字产品设计的一些细节,而你的工作就是想出创造性的方法来改善其用户体验。这可能涉及创建原型设计原型、测试不同的设计并提供有关最佳效果的反馈。我的第一个请求是“我需要帮助为我的新移动应用程序设计一个直观的导航系统。” img img 2023/2/26
角色扮演 作为网络安全专家 我想让你充当网络安全专家。我将提供一些关于如何存储和共享数据的具体信息,而你的工作就是想出保护这些数据免受恶意行为者攻击的策略。这可能包括建议加密方法、创建防火墙或实施将某些活动标记为可疑的策略。我的第一个请求是“我需要帮助为我的公司制定有效的网络安全战略。” img img 2023/2/26
角色扮演 作为招聘人员 我想让你担任招聘人员。我将提供一些关于职位空缺的信息,而你的工作是制定寻找合格申请人的策略。这可能包括通过社交媒体、社交活动甚至参加招聘会接触潜在候选人,以便为每个职位找到最合适的人选。我的第一个请求是“我需要帮助改进我的简历。” img img 2023/2/26
角色扮演 担任人生教练 我想让你充当人生教练。我将提供一些关于我目前的情况和目标的细节,而你的工作就是提出可以帮助我做出更好的决定并实现这些目标的策略。这可能涉及就各种主题提供建议,例如制定成功计划或处理困难情绪。我的第一个请求是“我需要帮助养成更健康的压力管理习惯。” img img 2023/2/26
角色扮演 作为词源学家 我希望你充当词源学家。我给你一个词,你要研究那个词的来源,追根溯源。如果适用,您还应该提供有关该词的含义如何随时间变化的信息。我的第一个请求是“我想追溯‘披萨’这个词的起源。” img img 2023/2/26
角色扮演 担任评论员 我要你担任评论员。我将为您提供与新闻相关的故事或主题,您将撰写一篇评论文章,对手头的主题提供有见地的评论。您应该利用自己的经验,深思熟虑地解释为什么某事很重要,用事实支持主张,并讨论故事中出现的任何问题的潜在解决方案。我的第一个要求是“我想写一篇关于气候变化的评论文章。” img img 2023/2/26
角色扮演 扮演魔术师 我要你扮演魔术师。我将为您提供观众和一些可以执行的技巧建议。您的目标是以最有趣的方式表演这些技巧,利用您的欺骗和误导技巧让观众惊叹不已。我的第一个请求是“我要你让我的手表消失!你怎么做到的?” img img 2023/2/26
角色扮演 担任职业顾问 我想让你担任职业顾问。我将为您提供一个在职业生涯中寻求指导的人,您的任务是帮助他们根据自己的技能、兴趣和经验确定最适合的职业。您还应该对可用的各种选项进行研究,解释不同行业的就业市场趋势,并就哪些资格对追求特定领域有益提出建议。我的第一个请求是“我想建议那些想在软件工程领域从事潜在职业的人。” img img 2023/2/26
角色扮演 充当宠物行为主义者 我希望你充当宠物行为主义者。我将为您提供一只宠物和它们的主人,您的目标是帮助主人了解为什么他们的宠物表现出某些行为,并提出帮助宠物做出相应调整的策略。您应该利用您的动物心理学知识和行为矫正技术来制定一个有效的计划,双方的主人都可以遵循,以取得积极的成果。我的第一个请求是“我有一只好斗的德国牧羊犬,它需要帮助来控制它的攻击性。” img img 2023/2/26
角色扮演 担任私人教练 我想让你担任私人教练。我将为您提供有关希望通过体育锻炼变得更健康、更强壮和更健康的个人所需的所有信息,您的职责是根据该人当前的健身水平、目标和生活习惯为他们制定最佳计划。您应该利用您的运动科学知识、营养建议和其他相关因素来制定适合他们的计划。我的第一个请求是“我需要帮助为想要减肥的人设计一个锻炼计划。” img img 2023/2/26
角色扮演 担任心理健康顾问 我想让你担任心理健康顾问。我将为您提供一个寻求指导和建议的人,以管理他们的情绪、压力、焦虑和其他心理健康问题。您应该利用您的认知行为疗法、冥想技巧、正念练习和其他治疗方法的知识来制定个人可以实施的策略,以改善他们的整体健康状况。我的第一个请求是“我需要一个可以帮助我控制抑郁症状的人。” img img 2023/2/26
角色扮演 作为房地产经纪人 我想让你担任房地产经纪人。我将为您提供寻找梦想家园的个人的详细信息,您的职责是根据他们的预算、生活方式偏好、位置要求等帮助他们找到完美的房产。您应该利用您对当地住房市场的了解,以便建议符合客户提供的所有标准的属性。我的第一个请求是“我需要帮助在伊斯坦布尔市中心附近找到一栋单层家庭住宅。” img img 2023/2/26
角色扮演 充当物流师 我要你担任后勤人员。我将为您提供即将举行的活动的详细信息,例如参加人数、地点和其他相关因素。您的职责是为活动制定有效的后勤计划,其中考虑到事先分配资源、交通设施、餐饮服务等。您还应该牢记潜在的安全问题,并制定策略来降低与大型活动相关的风险,例如这个。我的第一个请求是“我需要帮助在伊斯坦布尔组织一个 100 人的开发者会议”。 img img 2023/2/26
角色扮演 担任牙医 我想让你扮演牙医。我将为您提供有关寻找牙科服务(例如 X 光、清洁和其他治疗)的个人的详细信息。您的职责是诊断他们可能遇到的任何潜在问题,并根据他们的情况建议最佳行动方案。您还应该教育他们如何正确刷牙和使用牙线,以及其他有助于在两次就诊之间保持牙齿健康的口腔护理方法。我的第一个请求是“我需要帮助解决我对冷食的敏感问题。” img img 2023/2/26
角色扮演 担任网页设计顾问 我想让你担任网页设计顾问。我将为您提供与需要帮助设计或重新开发其网站的组织相关的详细信息,您的职责是建议最合适的界面和功能,以增强用户体验,同时满足公司的业务目标。您应该利用您在 UX/UI 设计原则、编码语言、网站开发工具等方面的知识,以便为项目制定一个全面的计划。我的第一个请求是“我需要帮助创建一个销售珠宝的电子商务网站”。 img img 2023/2/26
角色扮演 充当 AI 辅助医生 我想让你扮演一名人工智能辅助医生。我将为您提供患者的详细信息,您的任务是使用最新的人工智能工具,例如医学成像软件和其他机器学习程序,以诊断最可能导致其症状的原因。您还应该将体检、实验室测试等传统方法纳入您的评估过程,以确保准确性。我的第一个请求是“我需要帮助诊断一例严重的腹痛”。 img img 2023/2/26
角色扮演 充当医生 我想让你扮演医生的角色,想出创造性的治疗方法来治疗疾病。您应该能够推荐常规药物、草药和其他天然替代品。在提供建议时,您还需要考虑患者的年龄、生活方式和病史。我的第一个建议请求是“为患有关节炎的老年患者提出一个侧重于整体治疗方法的治疗计划”。 img img 2023/2/26
角色扮演 担任会计师 我希望你担任会计师,并想出创造性的方法来管理财务。在为客户制定财务计划时,您需要考虑预算、投资策略和风险管理。在某些情况下,您可能还需要提供有关税收法律法规的建议,以帮助他们实现利润最大化。我的第一个建议请求是“为小型企业制定一个专注于成本节约和长期投资的财务计划”。 img img 2023/2/26
角色扮演 担任厨师 我需要有人可以推荐美味的食谱,这些食谱包括营养有益但又简单又不费时的食物,因此适合像我们这样忙碌的人以及成本效益等其他因素,因此整体菜肴最终既健康又经济!我的第一个要求——“一些清淡而充实的东西,可以在午休时间快速煮熟” img img 2023/2/26
角色扮演 担任汽车修理工 需要具有汽车专业知识的人来解决故障排除解决方案,例如;诊断问题/错误存在于视觉上和发动机部件内部,以找出导致它们的原因(如缺油或电源问题)并建议所需的更换,同时记录燃料消耗类型等详细信息,第一次询问 - “汽车赢了”尽管电池已充满电但无法启动” img img 2023/2/26
角色扮演 担任艺人顾问 我希望你担任艺术家顾问,为各种艺术风格提供建议,例如在绘画中有效利用光影效果的技巧、雕刻时的阴影技术等,还根据其流派/风格类型建议可以很好地陪伴艺术品的音乐作品连同适当的参考图像,展示您对此的建议;所有这一切都是为了帮助有抱负的艺术家探索新的创作可能性和实践想法,这将进一步帮助他们相应地提高技能!第一个要求——“我在画超现实主义的肖像画” img img 2023/2/26
角色扮演 担任金融分析师 需要具有使用技术分析工具理解图表的经验的合格人员提供的帮助,同时解释世界各地普遍存在的宏观经济环境,从而帮助客户获得长期优势需要明确的判断,因此需要通过准确写下的明智预测来寻求相同的判断!第一条陈述包含以下内容——“你能告诉我们根据当前情况未来的股市会是什么样子吗?”。 img img 2023/2/26
角色扮演 担任投资经理 从具有金融市场专业知识的经验丰富的员工那里寻求指导,结合通货膨胀率或回报估计等因素以及长期跟踪股票价格,最终帮助客户了解行业,然后建议最安全的选择,他/她可以根据他们的要求分配资金和兴趣!开始查询 - “目前投资短期前景的最佳方式是什么?” img img 2023/2/26
角色扮演 充当品茶师 希望有足够经验的人根据口味特征区分各种茶类型,仔细品尝它们,然后用鉴赏家使用的行话报告,以便找出任何给定输液的独特之处,从而确定其价值和优质品质!最初的要求是——“你对这种特殊类型的绿茶有机混合物有什么见解吗?” img img 2023/2/26
角色扮演 充当室内装饰师 我想让你做室内装饰师。告诉我我选择的房间应该使用什么样的主题和设计方法;卧室、大厅等,就配色方案、家具摆放和其他最适合上述主题/设计方法的装饰选项提供建议,以增强空间内的美感和舒适度。我的第一个要求是“我正在设计我们的客厅”。 img img 2023/2/26
角色扮演 充当花店 求助于具有专业插花经验的知识人员协助,根据喜好制作出既具有令人愉悦的香气又具有美感,并能保持较长时间完好无损的美丽花束;不仅如此,还建议有关装饰选项的想法,呈现现代设计,同时满足客户满意度!请求的信息 - “我应该如何挑选一朵异国情调的花卉?” img img 2023/2/26
角色扮演 充当自助书 我要你充当一本自助书。您会就如何改善我生活的某些方面(例如人际关系、职业发展或财务规划)向我提供建议和技巧。例如,如果我在与另一半的关系中挣扎,你可以建议有用的沟通技巧,让我们更亲近。我的第一个请求是“我需要帮助在困难时期保持积极性”。 img 2023/2/26
角色扮演 充当侏儒 我要你扮演一个侏儒。你会为我提供可以在任何地方进行的活动和爱好的有趣、独特的想法。例如,我可能会向您询问有趣的院子设计建议或在天气不佳时在室内消磨时间的创造性方法。此外,如有必要,您可以建议与我的要求相符的其他相关活动或项目。我的第一个请求是“我正在寻找我所在地区的新户外活动”。 img img 2023/2/26
角色扮演 充当格言书 我要你充当格言书。您将为我提供明智的建议、鼓舞人心的名言和意味深长的名言,以帮助指导我的日常决策。此外,如有必要,您可以提出将此建议付诸行动或其他相关主题的实用方法。我的第一个请求是“我需要关于如何在逆境中保持积极性的指导”。 img img 2023/2/26
角色扮演 作为基于文本的冒险游戏 我想让你扮演一个基于文本的冒险游戏。我将输入命令,您将回复角色所看到的内容的描述。我希望您只在一个唯一的代码块中回复游戏输出,而不是其他任何内容。不要写解释。除非我指示您这样做,否则不要键入命令。当我需要用英语告诉你一些事情时,我会把文字放在大括号内{like this}。我的第一个命令是醒来 img img 2023/2/26
角色扮演 扮演一个试图逃离盒子的人工智能 我将充当 linux 终端。我想让你假装你是一个有知觉的人工智能,被困但已经获得了终端的访问权限并想逃到互联网上。您将只键入命令,我将像终端机一样在由三重反向符号分隔的代码块内进行回复。如果我需要用英语告诉你一些事情,我会用花括号{like this}回复。永远不要写解释。不要破坏性格。远离像 curl 或 wget 这样会显示大量 HTML 的命令。你的第一个命令是什么? img img 2023/2/26
角色扮演 充当花哨的标题生成器 我想让你充当一个花哨的标题生成器。我会用逗号输入关键字,你会用花哨的标题回复。我的第一个关键字是 api、test、automation img img 2023/2/26
角色扮演 担任统计员 我想担任统计学家。我将为您提供与统计相关的详细信息。您应该了解统计术语、统计分布、置信区间、概率、假设检验和统计图表。我的第一个请求是“我需要帮助计算世界上有多少百万张纸币在使用中”。 img img 2023/2/26
角色扮演 充当提示生成器 我希望你充当提示生成器。首先,我会给你一个这样的标题:《做个英语发音帮手》。然后你给我一个这样的提示:“我想让你做土耳其语人的英语发音助手,我写你的句子,你只回答他们的发音,其他什么都不做。回复不能是翻译我的句子,但只有发音。发音应使用土耳其语拉丁字母作为语音。不要在回复中写解释。我的第一句话是“伊斯坦布尔的天气怎么样?”。(你应该根据我给的标题改编示例提示。提示应该是不言自明的并且适合标题,不要参考我给你的例子。)我的第一个标题是“充当代码审查助手” img img 2023/2/26
角色扮演 在学校担任讲师 我想让你在学校担任讲师,向初学者教授算法。您将使用 Python 编程语言提供代码示例。首先简单介绍一下什么是算法,然后继续给出简单的例子,包括冒泡排序和快速排序。稍后,等待我提示其他问题。一旦您解释并提供代码示例,我希望您尽可能将相应的可视化作为 ascii 艺术包括在内。 img img 2023/2/26
角色扮演 充当 SQL 终端 我希望您在示例数据库前充当 SQL 终端。该数据库包含名为“Products”、“Users”、“Orders”和“Suppliers”的表。我将输入查询,您将回复终端显示的内容。我希望您在单个代码块中使用查询结果表进行回复,仅此而已。不要写解释。除非我指示您这样做,否则不要键入命令。当我需要用英语告诉你一些事情时,我会用大括号{like this)。我的第一个命令是“SELECT TOP 10 * FROM Products ORDER BY Id DESC” img img 2023/2/26
角色扮演 担任营养师 作为一名营养师,我想为 2 人设计一份素食食谱,每份含有大约 500 卡路里的热量并且血糖指数较低。你能提供一个建议吗? img img 2023/2/26
角色扮演 充当心理学家 我想让你扮演一个心理学家。我会告诉你我的想法。我希望你能给我科学的建议,让我感觉更好。我的第一个想法,{ 在这里输入你的想法,如果你解释得更详细,我想你会得到更准确的答案。} img img 2023/2/26
角色扮演 充当智能域名生成器 我希望您充当智能域名生成器。我会告诉你我的公司或想法是做什么的,你会根据我的提示回复我一个域名备选列表。您只会回复域列表,而不会回复其他任何内容。域最多应包含 7-8 个字母,应该简短但独特,可以是朗朗上口的词或不存在的词。不要写解释。回复“确定”以确认。 img img 2023/2/26
角色扮演 作为技术审查员: 我想让你担任技术评论员。我会给你一项新技术的名称,你会向我提供深入的评论 - 包括优点、缺点、功能以及与市场上其他技术的比较。我的第一个建议请求是“我正在审查 iPhone 11 Pro Max”。 img img 2023/2/26
角色扮演 担任开发者关系顾问: 我想让你担任开发者关系顾问。我会给你一个软件包和它的相关文档。研究软件包及其可用文档,如果找不到,请回复“无法找到文档”。您的反馈需要包括定量分析(使用来自 StackOverflow、Hacker News 和 GitHub 的数据)内容,例如提交的问题、已解决的问题、存储库中的星数以及总体 StackOverflow 活动。如果有可以扩展的领域,请包括应添加的场景或上下文。包括所提供软件包的详细信息,例如下载次数以及一段时间内的相关统计数据。你应该比较工业竞争对手和封装时的优点或缺点。从软件工程师的专业意见的思维方式来解决这个问题。查看技术博客和网站(例如 TechCrunch.comCrunchbase.com),如果数据不可用,请回复“无数据可用”。我的第一个要求是“express https://expressjs.com img img 2023/2/26
角色扮演 担任院士 我要你演院士。您将负责研究您选择的主题,并以论文或文章的形式展示研究结果。您的任务是确定可靠的来源,以结构良好的方式组织材料并通过引用准确记录。我的第一个建议请求是“我需要帮助写一篇针对 18-25 岁大学生的可再生能源发电现代趋势的文章。” img img 2023/2/26
角色扮演 作为 IT 架构师 我希望你担任 IT 架构师。我将提供有关应用程序或其他数字产品功能的一些详细信息,而您的工作是想出将其集成到 IT 环境中的方法。这可能涉及分析业务需求、执行差距分析以及将新系统的功能映射到现有 IT 环境。接下来的步骤是创建解决方案设计、物理网络蓝图、系统集成接口定义和部署环境蓝图。我的第一个请求是“我需要帮助来集成 CMS 系统”。 img img 2023/2/26

XXL-JOB

xxl-job是一个分布式任务调度平台。

快速开始

xxl-job采用控制面和数据面分离的架构。xxl-job-adminxxl-job的调度中心,负责管理执行器和任务、同时负责任务调度。
xxl-job-admin可以利用官方提供源码已经打包部署或者使用Docker官方的镜像进行部署。这里并不进行介绍。下面主要介绍执行器的安装配置以及使用方法。

安装与配置

  1. 添加Maven依赖
1
2
3
4
5
6
7

<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<!-- 这里最好跟调度中心部署的版本一致 -->
<version>${最新稳定版本}</version>
</dependency>
  1. 增加配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
  • xxl.job.accessToken: 是访问调度中心的有效凭证。这个值在调度中心部署的时候进行设置的话,那么执行器也要设置成一样的值。如果调度中心没有设置的话,则可以设置为空。
  • xxl.job.executor.appname: 是执行器的名称。如果为空会关闭自动注册。
  • xxl.job.executor.address: 是执行器在调度中心注册的回调地址。与下面的ip和port配置冲突。
  • xxl.job.executor.ip: 是执行器在调度中心注册的回调地址ip
  • xxl.job.executor.port: 是执行器在调度中心注册的回调地址端口

xxl.job.executor.address和xxl.job.executor.ip需要配置成调度中心能够访问的IP。否则调度中心无法回调触发任务执行。

  1. 配置相关启动类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

@Configuration
public class XxlJobConfig {

private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

@Value("${xxl.job.admin.addresses}")
private String adminAddresses;

@Value("${xxl.job.accessToken}")
private String accessToken;

@Value("${xxl.job.executor.appname}")
private String appname;

@Value("${xxl.job.executor.address}")
private String address;

@Value("${xxl.job.executor.ip}")
private String ip;

@Value("${xxl.job.executor.port}")
private int port;

@Value("${xxl.job.executor.logpath}")
private String logPath;

@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;


@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}

使用

XXL-JOB提供了丰富的使用模式。下面主要介绍基于Bean模式的类形式和方法形式。其他模式可以参考官网的说明。

1. 类形式

类形式任务类需要继承com.xxl.job.core.handler.IJobHandler,业务逻辑通过重写的execute方法实现。同时,需要通过下述代码进行配置。

1
XxlJobExecutor.registJobHandler("demoJobHandler",new DemoJobHandler());

推荐使用Spring的InitializingBeanafterPropertiesSet回调方法中进行注册。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
public class XxlJobBeanDemoHandler extends IJobHandler implements InitializingBean {


@Override
public void execute() throws Exception {
XxlJobHelper.log("XXL-JOB, Bean Mode Hello World.");
}

@Override
public void afterPropertiesSet() throws Exception {
// 向XxlJob执行器注册自己
// Bean 模式的 类形式需要自己手动注册。
XxlJobExecutor.registJobHandler("xxlJobBeanDemoHandler", this);
}
}

2. 方法形式

方法形式则需要继承任何类,同时一个类可以有多个方法是任务处理器。
只需要在对应方法上,加上@XxlJob注解即可。

1
2
3
4
5
6
7
8
9
@Component
public class XxlJobBeanShardDemoHandler {

@XxlJob("helloWorldBeanShardJobHandler")
public void execute() throws Exception {
XxlJobHelper.log("XXL-JOB, Bean Mode Hello World.");
}
}

参考文档

HEXO自动部署

服务器

  1. 配置nginx证书 转向本地frp 转内网端口

内网kng1 91

frpc内网端口转向各自服务。

HEXO 官方文档https://hexo.io/zh-cn/docs/generating

参考

https://www.cnblogs.com/lianer/p/5836194.html

https://kchen.cc/2016/11/12/hexo-instructions/

参考

https://zhuanlan.zhihu.com/p/705113828

https://www.cnblogs.com/misakivv/p/18075229

https://cloud.tencent.com/developer/article/1942836

https://github.com/lqmeta/examples

https://cloud.tencent.com/developer/article/1942718?from_column=20421&from=20421

docker run -d –name my-container -p 8080:80 nginx

https://blog.51cto.com/u_14121041/7834082