1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-27 17:48:27 +08:00
2019-10-30 13:49:23 +08:00

310 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 应用简介
context是一种新的编程语言与应用框架通过模块化、集群化、自动化实现软件的快速开发快速共享快速使用。
context是以群聊的形式进行资源的共享。
用户可以创建任意的群聊,把相关人员聚集在一起,每个人可以将自己的设备,共享到群聊中,供组员使用,从而实现资源的最大利用。
每个设备上有一堆命令,用户可以将任意设备上任意命令,添加到自定义的应用界面中,按照自己的需求去组合,从面实现场景化与个性化的定制。
所以每个群聊中会有各种各样自定义的应用,所有的命令都是以群聊作为场景,进行权限的检查与分配。
这些应用,可以像文本与图片一样,在群聊里自由的流动,可以被更快分享出去,再次收藏与组合形成新的应用组件,还可以在聊天记录中直接使用。
context是以分布式的方式进行程序的开发。
开发者,可以用脚本语言开发应用,随时随地的在自己任意设备上加载脚本,然后将动态域名分享出去,应用就可以被用户在群聊中任意的传播。
所有的代码与数据,都在自己设备上,可以进行任意的实时控制。
消灭所有中间环节,让几行代码的小函数,就可以成为独立的应用,从而实现软件的快速开发与快速传播,将任意一行代码的价值,放大成千上万倍。
## 下载安装
### 下载
在Linux或Mac上可以直接用命令下载
在Windows上推荐先安装 [GitBash](https://www.git-scm.com/download/)然后在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|