🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
DemoInstallSign in
Socket

misaka

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

misaka

御坂网络的雏形

0.1.0
latest
Source
npm
Version published
Maintainers
1
Created
Source

Misaka - 御坂网络中的御坂妹妹

故事

御坂妹妹是《魔法禁书目录》和《某科学的超电磁炮》这两部小说中登场的角色,她们全员都是御坂美琴的克隆体,拥有 Level 2 至 Level 4 的超能力。

单个御坂妹妹并没有太强能力,但由近万个御坂妹妹组成的御坂网络(The Sisters)则是相当恐怖的存在,它不光承载了学园都市最强超能力者一方通行的全部计算量,还具有将御坂美琴直接提升到绝对能力者的能力,可以说是科学侧当前最为逆天的存在。

御坂网络的架构很简单:

  • 网络的核心是“最后之作”(Last Order),负责管理每一个御坂妹妹的状态,相当于一个中央控制器;
  • 每个御坂妹妹通过私有协议连接到“最后之作”,共享所有的记忆和运算能力。

在 Game Prestige,御坂网络是运维的伙伴,负责实时汇报服务器状态,或者执行规定好的命令。

使用御坂网络

安装和运行

要在本地运行御坂网络非常简单,只需要以下步骤。

  • 在一个目录初始化 npm

     mkdir my-misaka
     cd my-misaka
     npm init
    
  • 获取 Misaka 代码

     npm install --save misaka
    
  • 随手写一个可以工作的 Misaka 脚本

     mkdir scripts
     cat > scripts/hello.js <<EOF
     module.exports = function(misaka) {
         misaka.send("Hello, everyone!");
     }
     EOF
    
  • 启动 Misaka

     node_modules/.bin/misaka
    

与御坂网络交互

一旦 Misaka 开始运行,Last Order 的命令行就能立即收到消息,此时在 Last Order 命令行里输入 misaka help 就能查看详细的帮助。

默认情况下 Misaka 没有激活任何功能,可以通过输入下面的命令激活功能。激活是持久的,状态会存在 redis 里,所以一般只要做一次激活就可以永久使用。

# 开启脚本列表。
misaka> misaka script scripts enable

# 查看所有支持的脚本,之后就可以通过 `misaka 10033 scripts` 查看所有可开启的脚本。
misaka> misaka 10033 scripts
Shell: 御坂 No.10033 情绪激动的报告说,命令执行成功,下面是详情:
* 任务 ID:1
✘ 未启用:`facter`
✘ 未启用:`help`
✘ 未启用:`ping`
✘ 未启用:`puppet`
✘ 未启用:`sample`
✔ 已启用:`scripts`
✘ 未启用:`time`
✘ 未启用:`uptime`
✘ 未启用:`wolf_warn`

# 开启新的脚本,比如 `help`。
misaka> misaka script help enable

让御坂学习新脚本

只需要在 Misaka 项目的 scripts 目录中添加新的脚本文件,重启 Misaka 后就可以通过 Last Order 开启这个脚本。

脚本文件的文件名即脚本名,比如文件名是 foo,那么可通过 misaka script foo enable 来启用。

脚本文件需要导出一个函数作为初始化函数,以 scripts/time.js 文件为例,基本代码结构如下:

/**
* 报告当前服务器的时间。
*/
"use strict";

module.exports = function(misaka) {
  var time = this.channel("time", {
    usage: "time",
    help: "报告御坂当前时间",
    pattern: /^time\s*$/i
  });
  time.on("message", function(msg) {
    msg.send("当前时间是 " + new Date());
  });
};

其中 this 对象为 Script 类实例,类定义在 utils/script.js;函数参数中的 misakaMisaka 类实例,类定义在 misaka.js

一般只需要使用 thismisaka 便可以完成脚本的全部功能。

几个核心方法:

  • Script#channel:创建一个新的命令,返回的是一个 EventEmitter,调用者通过 message 事件来获取消息,获得的 msgMessage 类实例,类定义在 utils/message.js
  • Script#on:监听脚本的各种消息,包括 enableddisabled 两种,分布在脚本被启用和被禁用时触发。
  • Misaka#send:主动向外部发消息,内容会显示在 Last Order 的输出里。
  • Misaka#brain:御坂网络的中心存储,所以写入的内容会被持久化到 Last Order,每次 Misaka 连上 Last Order 时会自动读取。这个属性是 Brain 类实例,类定义在 utils/brain.js

开发说明

御坂网络不同于一般的代码逻辑,她们是(可以)有感情的,制作任何御坂网络脚本时应该记得一个原则:有爱。

这种“爱”体现在交互思维上,御坂通过一些命令进行交互,回答各种命令时应该带有感情,甚至最好带有御坂的语癖,让她们更有活力,更像一个真实的克隆人而不是一堆代码。

TODOs

比较需要实现的功能:

  • 允许单个 Misaka 接受 http 请求,从而可以作为 web hook 的响应程序;
  • 利用御坂网络所在服务器的空闲资源做分布式计算;
  • 御坂网络 P2P 传递信息和文件;
  • 限制 Misaka 实例占用的资源,限制 Misaka 和她执行的 shell 命令占用的总 CPU/内存量。

Keywords

misaka

FAQs

Package last updated on 08 May 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts