应用简介
context是一种新的编程语言与应用框架,通过模块化、集群化、自动化,实现软件的快速开发,快速共享,快速使用。
context是以群聊的形式,进行资源的共享。 用户可以创建任意的群聊,把相关人员聚集在一起,每个人可以将自己的设备,共享到群聊中,供组员使用,从而实现资源的最大利用。 每个设备上有一堆命令,用户可以将任意设备上任意命令,添加到自定义的应用界面中,按照自己的需求去组合,从面实现场景化与个性化的定制。 所以每个群聊中会有各种各样自定义的应用,所有的命令都是以群聊作为场景,进行权限的检查与分配。 这些应用,可以像文本与图片一样,在群聊里自由的流动,可以被更快分享出去,再次收藏与组合形成新的应用组件,还可以在聊天记录中直接使用。
context是以分布式的方式,进行程序的开发。 开发者,可以用脚本语言开发应用,随时随地的在自己任意设备上加载脚本,然后将动态域名分享出去,应用就可以被用户在群聊中任意的传播。 所有的代码与数据,都在自己设备上,可以进行任意的实时控制。 消灭所有中间环节,让几行代码的小函数,就可以成为独立的应用,从而实现软件的快速开发与快速传播,将任意一行代码的价值,放大成千上万倍。
下载安装
下载
在Linux或Mac上,可以直接用命令下载, 在Windows上,推荐先安装 GitBash,然后在GitBash中执行命令下载。
$ export ctx_dev=https://shylinux.com; curl $ctx_dev/publish/boot.sh | bash -s install context
install后面的参数context,就是指定的下载目录,如不指定,会把相关文件下载到当前目录。
ctx_dev环境变量指定服务器地址,所以也可以自行搭建服务器。
启动
下载完成后,会自动启动context, windows下的GitBash中,如果自动启动失败,则需要手动启动一下,如下命令。
$ cd context && bin/boot.sh
使用
启动后context,提供了一种交互式的shell,直接可以执行各种内部命令和本地命令。 如下查看当前目录与相关目录下的文件。
0[22:21:19]nfs> pwd
/home/homework/context
1[22:21:20]nfs> dir
time size line path
2019-09-12 22:21:18 103 5 bin/
2019-09-12 22:20:40 72 3 etc/
2019-09-12 22:20:40 55 3 var/
2019-09-12 22:21:18 50 2 usr/
2[20:51:21]nfs> dir bin
time size line path
2019-09-16 20:51:14 18782016 5209 bin/bench
2019-09-16 20:51:14 2634 99 bin/boot.sh
2019-09-16 20:51:14 125 5 bin/node.sh
2019-09-16 20:51:14 96 6 bin/user.sh
2019-09-16 20:51:14 147 9 bin/zone.sh
3[20:51:22]nfs> dir etc
time size line path
2019-09-16 20:51:14 339 11 etc/common.shy
2019-09-16 20:51:14 244 11 etc/exit.shy
2019-09-16 20:51:14 297 18 etc/init.shy
4[22:21:20]nfs>
- bin目录,就是各种启动脚本与命令
- etc目录,就是各种配置脚本与文件
- var目录,就是各种输出文件,如日志与缓存文件
- usr目录,就是各种前端文件与数据,如js、css文件
如需要自行启动context,必须进入下载后的目录中,然后运行bin/boot.sh脚本。否则会找不到相关文件。
quit命令退出context
4[22:21:20]nfs> quit
quit, wait 1s
time code
2019-09-17 10:29:59 0
4[22:21:20]nfs>
$
如果需要搭建私有服务,可以直接运行bin/zone.sh,启动根服务节点。
基本功能
除了命令行交互,还可以访问http://localhost:9095,通过浏览器使用更丰富的功能。 context启动后,默认监听9095端口,启动网页服务。
context的应用界面是群聊的形式进行组织,每个群聊下可以创建任意的应用列表。 所以每个应用都有群聊的上下文,可以获取当前群组的相关信息,也可以把执行结果发送到群聊中。 另外应用也可以像文本或图片一样发送出去,共享给别的群组,再重新组合成新的应用界面。
如下左图,左边栏是群组列表,右边栏是当前群组下的应用列表。 中上栏,是当前群组的聊天记录。中下栏是当前应用的界面。 如下右图,在应用界面的左上角有界面选项,还可以把应用界面切换到不同的大小。
+----------------------------+ +----------------------------+
| | | |
+------+--------------+------+ +---------------------+------+
| | | | | | |
| 群 | | 应 | | | 应 |
| 组 | 聊天记录 | 用 | | | 用 |
| 列 | | 列 | | 应用界面 | 列 |
| 表 +--------------+ 表 | | | 表 |
| | | | | | |
| | 应用界面 | | | | |
| | | | | | |
+------+--------------+------+ +---------------------+------+
| | | |
+----------------------------+ +----------------------------+
这些应用的服务器,可是群聊中任意组员的设备,所以组员越多设备也越多,应用种类也就越丰富。
任意组员,都可以使用这些共享设备提供的命令,组合成各种应用界面,更加契合当前群组的使用需求。 所有的应用与数据,都存放在本地设备上,可以被安全的管理与备份。
创建群聊
左边栏的左上角,有创建按钮,点击便可打开群聊创建窗口。
左方框中,就是当前网络中所有的用户节点,点击即可添加到右方框中。
在右方框中,点击用户节点,便可删除选择。
输入群组名称,点击创建,便可用已选中的用户创建新的群聊。
创建应用
右边栏的左上角,有创建按钮,点击便可打开应用创建窗口。
左边方框是当前群组的所有成员,选择某个成员,中间框便显示,此成员设备上的所有命令。
从中间方框中,选中所需要的命令,便可组合成所需的应用。
在右方框中,输入应用名称,便可创建归属当前群组的应用。
共享应用
本群组内的应用,除了可以本群组成员一起使用,还可以分享给其它用户。
点击共享按钮,便可以生成共享链接或二维码,其它用户点击登录后,便可加入此群组,使用此应用。
应用开发
context提供了插件的机制,可以自由的扩展应用,满足用户更多定制化的需求。
src/plugin目录下,就是各种插件。 每个插件,都有后端index.go文件、index.shy文件、前端index.js文件、index.css文件。
推荐使用index.shy开发所需应用,shy语言,是context开发的一种新的编程语言,不需要编译,可以在任意设备上自由的使用。
当应用过于复杂或对性能有过高要求时,可以在index.go实现命令。
当有特殊的交互需求时,可以在index.js中实现前端功能。
当有界面美化需求时,可以在index.css加入样式。
context提供了,完整的开发工具链,从插件的创建、编译、发布、加载,简化了所有开发环节。
创建插件
编译插件
加载插件
创建集群
context不仅可以单机提供服务,还支持自动化的集群,实现了自动组网、自动路由、自动认证。
在bin目录下,就是各种启动脚本。
- bin/zone.sh 启动区域节点
- bin/user.sh 启动用户节点
- bin/node.sh 启动工作节点
- bin/boot.sh 启动默认节点
在公共服务器上,执行bin/zone.sh脚本,会创建一个独立的工作域,所有的子节点,都会将用户信息注册到此节点。 每个用户便可在自己的设备上,设置ctx_dev变量,指向区域向区域ip与端口。 使用bin/user.sh启动自己的节点,便可自动获取动态域名与注册用户信息。
在同一区域下的所有节点,可以自由的相互访问,并可以在任意设备上创建群聊,所有的信息会自动的分发到其它节点。
- 个人使用,可以创建一个区域节点,下挂多个工作节点。
- 团队使用,需要创建一个区域节点,多个用户节点,每个用户节点下,可以挂多个工作节点。
- 如果用户节点或工作节点过多,可以创建分机节点,通过增加层级来降低单机负载。
context每个启动的进程都是一个独立的节点,根据网络框架中的功能作用,可以分为区域节点、用户节点、工作节点、分机节点。 这几种节点,除了网络框架中的作用外,其它的功能模块与命令都完全一样,没有差别。 远程命令与本地命令,无差别的运行,从而实现无限扩容的分布式计算。
个人使用
启动区域节点
打开终端,进入context目录,执行如下命令,
$ bin/zone.sh
0[13:26:27]nfs>
启动工作节点
再打开终端,进入context目录,执行如下命令,
$ bin/node.sh create app/hello
0[13:26:27]nfs> remote
create_time pod type
2019-07-30 13:26:27 com master
启动context后,调用remote命令,可以查看到有一个上级节点。
启动工作节点
再打开终端,进入context目录,执行如下命令,
$ bin/node.sh create app/world
0[13:26:27]nfs> remote
create_time pod type
2019-07-30 13:26:27 com master
分布式命令
启动两种节点节点后,就可以在任意节点上调用命令,也可以调用远程节点的命令。 如在区域节点上调用remote,就可以看到两个工作节点。
4[13:27:26]nfs> remote
create_time pod type
2019-07-30 13:26:27 hello worker
2019-07-30 13:26:30 world worker
查看当前路径
3[13:39:29]nfs> pwd
D:\context/var
4[13:40:03]nfs>
查看当时目录
4[13:40:03]nfs> dir
time size line path
2019-07-23 21:36:36 387 4 var/hi.png
2019-07-27 13:41:56 4096 4 var/log/
2019-06-15 10:58:03 0 1 var/run/
2019-07-30 12:55:19 4096 8 var/tmp/
5[13:40:20]nfs>
执行远程命令,只需要在命令前加上节点名与冒号。
6[13:41:28]nfs> hello:pwd
D:\context\hello/var
6[13:41:28]nfs> world:pwd
D:\context\world/var
在任意随机节点上执行命令,用百分号作节点名。
5[13:40:20]nfs> %:pwd
D:\context\hello/var
5[13:40:20]nfs> %:pwd
D:\context\world/var
在所有节点上执行命令,用星号作节点名。
7[13:41:36]nfs> *:pwd
D:\context\hello/var D:\context\hello/var
团队使用
context也可以支持团队协作使用,这时候就需要将区域节点部署到公共主机上。 区域节点的作用就是生成动态域名,分发路由,解决命名冲突,与权限分配等功能。
启动用户节点
在公共主机上启动区域节点后,每个组员就可以在自己主机上启动用户节点,但需要指定区域节点的地址。 如下命令,ip换成自己的公共主机,9095端口保留,这是context默认的web端口。
$ ctx_dev=http://192.168.88.102:9095 bin/user.sh
启动工作节点
同样每个用户都可以启动多用工作节点。
$ bin/node.sh create world
启动团队协作
当有多个用户连接到公共节点后,用户与用户之间就可以相互访问对方的所有节点。 但是默认启用了节点认证,所有命令都没有权限。所以调用对应节点上的命令,需要对方开启命令权限。
每个用户随时都可以在自己节点上,为其它用户设置任意角色,给每个角色分配任意命令。 从而实现安全快速的资源共享。
启动分机节点
当区域的用户节点过多,就可以启动分机节点。 启动分机节点,只需要指定上级节点即可。 用户在连接公共节点时,指定这个新节点的ip即可。 context会自动生成新的网络路由。
$ ctx_dev=http://192.168.88.102:9095 bin/boot.sh
系统架构
数据流 | 命令流 | 权限流 | 应用流 | |
---|---|---|---|---|
应用层 | ctx | cli | aaa | web |
控制层 | lex | yac | log | gdb |
数据层 | tcp | nfs | ssh | mdb |