服务器介绍#

目的#

注意

为了使本指南更易于理解,请先熟悉 Bokeh 的一些核心概念,详见介绍部分。

Bokeh 服务器使创建交互式 Web 应用程序变得容易,这些应用程序将前端 UI 事件连接到正在运行的 Python 代码。

Bokeh 创建高级 Python 模型,例如绘图、范围、坐标轴和字形,然后将这些对象转换为 JSON,以传递给其客户端库 BokehJS。有关后者的更多信息,请参阅贡献 BokehJS

这种灵活且解耦的设计提供了一些优势。例如,很容易让其他语言(如 R 或 Scala)驱动浏览器中的 Bokeh 绘图和可视化。

然而,在 Python 环境和浏览器之间保持这些模型同步将提供更强大的功能

  • 使用 Python 的全部功能响应浏览器中的 UI 和工具事件,进行计算或查询

  • 自动将服务器端更新推送到浏览器中的 UI 元素,例如部件或绘图

  • 使用定期、超时和异步回调来驱动流式更新

这就是 Bokeh 服务器发挥作用的地方

Bokeh 服务器的主要目的是在底层 Python 环境和浏览器中运行的 BokehJS 库之间同步数据。


这是一个来自https://demo.bokeh.org的简单示例,说明了这种行为

操作 UI 控件通过 Bokeh 服务器将新值传达给后端。 这也会触发回调,以实时使用输入更新绘图。

用例场景#

考虑在您可能想要使用 Bokeh 服务器时的一些不同场景。

本地或个人使用#

您可能希望将 Bokeh 服务器用于探索性数据分析,可能在 Jupyter 笔记本中,或者用于您和您的同事可以在本地运行的小型应用程序。

Bokeh 服务器在这里非常方便,可以通过有效使用 Bokeh 服务器应用程序来实现快速简单的部署。 有关更多详细信息,请参阅构建应用程序

创建可部署的应用程序#

您可能还希望使用 Bokeh 服务器将交互式数据可视化和应用程序发布给更广泛的受众,例如在互联网或内部公司网络上。 Bokeh 服务器也非常适合这种用法,但您可能需要首先查阅以下内容

  • 有关如何创建 Bokeh 应用程序的信息,请参阅构建应用程序

  • 有关如何使用您的应用程序部署服务器的信息,请参阅部署场景

共享发布#

以上两种场景都涉及一个人在服务器上制作应用程序,供个人使用或供更广泛的受众使用。

虽然几个人可以将不同的应用程序发布到同一服务器,但这并不是一个好的用例,因为托管的应用程序可以执行任意 Python 代码。 这引发了进程隔离和安全问题,并使这种共享租用变得令人望而却步。

支持这种具有多个用户的多应用程序环境的一种方法是构建基础设施,该基础设施可以为每个应用程序或至少为每个用户运行一个 Bokeh 服务器。 Bokeh 项目或第三方可能会在未来为此类用法创建公共服务,但此类开发超出了本文档的范围。

另一种可能性是拥有一个应用程序,该应用程序可以访问许多不同的人发布的数据和其他工件,可能具有访问控制。 这种场景可以通过 Bokeh 服务器实现的,但通常涉及将其与其他 Web 应用程序框架集成。