/context

2.1 一门新的编程语言,一种新的应用框架

Primary LanguageGoMIT LicenseMIT

应用简介

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