2014-09-16 10:23:57 +04:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<title>Wide - 开发指南</title>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<h1>开发指南</h1>
|
|
|
|
|
<p>
|
|
|
|
|
该文档介绍了 Wide 的核心设计原理与实现。
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2014-09-17 10:49:10 +04:00
|
|
|
|
如果您要读 Wide 的源码或者要进行修改、二次开发等,请先仔细阅读该文档。
|
2014-09-16 10:23:57 +04:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2>关键设计</h2>
|
|
|
|
|
<h3>工作空间</h3>
|
|
|
|
|
<p>
|
|
|
|
|
Wide 是一个多用户的集成开发环境,每个用户的工作空间是完全隔离的:
|
|
|
|
|
<ul>
|
|
|
|
|
<li>文件路径</li>
|
|
|
|
|
<li>环境变量</li>
|
|
|
|
|
<li>运行进程</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
例如在执行“构建 & 运行”时,Wide 会设置命令 go build 执行的环境变量 $GOPATH 为用户的工作空间,这样编译过程就是在该用户的工作空间中进行,保证其隔离性。
|
|
|
|
|
</p>
|
|
|
|
|
|
2014-09-17 20:07:25 +04:00
|
|
|
|
<h3>会话</h3>
|
2014-09-16 10:23:57 +04:00
|
|
|
|
<p>
|
2014-09-16 19:58:52 +04:00
|
|
|
|
在 UI 上存在两种 tab:浏览器 tab;编辑器 tab。
|
|
|
|
|
用户可以在一个浏览器 tab 中打开多个编辑器 tabs,但输出窗口只有一个。这意味着一个浏览器 tab 只能有一个正在运行的用户代码的程序进程。
|
|
|
|
|
需要同时运行多个程序进程的场景可以通过打开多个浏览器 tabs 达成。
|
2014-09-16 10:23:57 +04:00
|
|
|
|
</p>
|
|
|
|
|
|
2014-09-17 10:49:10 +04:00
|
|
|
|
<ul>
|
|
|
|
|
<li>一个浏览器 tab 对应一个 Wide 会话:只要打开/刷新一个 tab,就会新建一个 Wide 会话</li>
|
2014-09-17 20:07:25 +04:00
|
|
|
|
<li>Wide 会话的 id 在源码中统一命名为 <code>sid</code>,在需要使用 HTTP 会话的地方也统一明确表明</li>
|
2014-09-17 10:49:10 +04:00
|
|
|
|
</ul>
|
2014-09-16 10:23:57 +04:00
|
|
|
|
|
|
|
|
|
<h3>WebSocket</h3>
|
|
|
|
|
<p>
|
|
|
|
|
WebSocket 用于后端推送数据给前端:
|
|
|
|
|
</p>
|
|
|
|
|
<ul>
|
2014-09-16 11:06:52 +04:00
|
|
|
|
<li>输出通道</li>
|
|
|
|
|
<li>通知通道</li>
|
2014-09-16 10:23:57 +04:00
|
|
|
|
<li>Shell 通道</li>
|
|
|
|
|
</ul>
|
2014-09-16 19:58:52 +04:00
|
|
|
|
|
2014-09-17 10:53:30 +04:00
|
|
|
|
通道和会话一对一关联,也就是说如果用户新开浏览器 tab,则新建通道和其关联。
|
2014-09-16 10:23:57 +04:00
|
|
|
|
|
|
|
|
|
<h3>事件与通知</h3>
|
|
|
|
|
<p>
|
2014-09-16 19:58:52 +04:00
|
|
|
|
每个会话都有一个对应的事件队列,当接收到事件时取出该事件并转为通知,再通过通知窗口通道推送给前端。
|
2014-09-16 10:23:57 +04:00
|
|
|
|
还存在一个全局事件队列,入队的事件将分发到每个用户的事件队列中,以便进行通知广播。
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
通知中的消息需要国际化处理。在语言配置文件中以 notification_ 为前缀,事件代码(event code)为后缀的项即通知消息。
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>代码辅助</h3>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
<li>自动完成,通过 gocode 工具实现</li>
|
|
|
|
|
<li>跳转到声明,通过 ide_stub 工具实现</li>
|
|
|
|
|
<li>查找使用,通过 ide_stub 工具实现</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
2014-09-17 10:49:10 +04:00
|
|
|
|
代码辅助功能满足工作空间隔离。
|
2014-09-16 10:23:57 +04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2>编码规范</h2>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|