> For the complete documentation index, see [llms.txt](https://changkun.gitbook.io/leapmotion_v2_cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://changkun.gitbook.io/leapmotion_v2_cn/yu-yan/js/ying-yong-cheng-xu-kai-fa/leap_architecture.md).

# 系统架构

LeapMotion 软件会作为一个服务(Windows)或后台(Mac 或 Linux)运行。软件通过 USB 线连接了 LeapMotion 控制器设备。支持 Leap 的应用可以访问 LeapMotion 服务收到运动的追踪数据。LeapMotion SDK 提供了两种风格的 API 来获取 LeapMotion 数据：本地接口以及 WebSocket 接口。这些 API 能使你通过各种不同的编程语言甚至浏览器环境中的 JavaScript 创建支持 Leap 的应用程序。

## 应用程序接口

LeapMotion SDK 提供了两种方式的 API 从 LeapMotion 服务中获得追踪数据：本地接口和 WebSocket 接口。本地接口是一个动态链接库，你可以使用这个动态链接库来创建支持 Leap 的新程序。WebSocket 接口以及 JavaScript 库可以让你创建支持 Leap 的 Web 程序。

## 本地接口

本地应用程序接口通过一个动态加载库来提供。这个库用于连接 LeapMotion 服务及想你的应用程序提供追踪数据。你可以将它连接到 C++ 和 Objective-C 应用，或者通过所提供的语言绑定用于 Java、C#、以及 Python。

![支持 Leap 的应用程序](https://3708604558-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LmAGnx6ThZjQnyNN4Sg%2F-LmAGpETZPiOMDijInN-%2F-LmAGz69hyIbkGJhm4aX%2FArch_OS_Level_Diagram.png?generation=1565704894415761\&alt=media)

1. LeapMtion 服务会从 USB 接口上的 LeapMotion 设备接受数据。然后处理并返回给运行只支持 Leap 的应用程序。默认情况下，服务只会给前台应用程序返回相应的追踪数据，而应用可以在后台通过请求的方式来获得相应的追踪数据（请求可以由用户来定义）。
2. LeapMotion 应用程序与服务本身分离运行，因此允许电脑用户能够控制 LeapMotion 的安装。LeapMotion 应用程序在 Windows 下是一个控制面板，在 Mac OS X 中是一个菜单应用。
3. 支持 Leap的前台程序用于接受 Leap的数据，一个支持 Leap 的程序能使用 Leap 本地库连接到 LeapMotion 服务。你的应用程序可以使用任何一种直接(C++/Objective-C)或支持语言(Java/C#/Python)的封装库来链接库。
4. 当支持应用Leap 的应用程序在操作系统中失去响应时，LeapMotion 服务会停止发送数据给它。应用需要在后台工作时，可以请求继续接受数据。当在后台工作时，配置的设置是有前台应用所决定的。

## WebSocket 接口

LeapMotion 服务运行了一个在本地 localhost 6437 端口的 WebSocket 服务器。这个 WebSocket 提供了 JSON 格式的追踪数据。一个客户端 JavaScript 库可以用来接受处理 JSON 消息并将数据作为常见的 JavaScript 对象。

![支持 Leap 的 Web 应用](https://3708604558-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LmAGnx6ThZjQnyNN4Sg%2F-LmAGpETZPiOMDijInN-%2F-LmAGz6ZjjnNWuYcPKpA%2FArch_WebSocket_Diagram.png?generation=1565704891472764\&alt=media)

1. LeapMotion 服务提供 WebSocket 服务器，服务监听：<http://127.0.0.1:6437>
2. LeapMotion 控制面板允许用户来决定是否启用 WebSocket 服务端口。
3. 服务端将追踪数据使用 JSON 消息发送。应用可以将配置信息发送到服务器端。
4. 客户端 JavaScript 库`leap.js`可以用于构建 Web 应用。这个库可以建立服务器和消耗的 JSON 消息客户端之间的连接。这个 JavaScript 库的 API 的理念与结构都与本地 API 结构非常相似。

这个接口主要是为 Web 应用程序服务，但实际上任何应用都能够建立一个与 WebSocket 服务的连接，接口的服务端代码遵循 [RFC6455](http://tools.ietf.org/html/rfc6455)。
