服务器介绍#

目的#

注意

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

Bokeh 服务器使得创建交互式网页应用变得容易,这些应用可以将前端的用户界面事件与运行的 Python 代码连接起来。

Bokeh 创建高级的 Python 模型,例如图表、范围、轴和字形,然后将这些对象转换为 JSON 以传递给其客户端库 BokehJS。有关后者的更多信息,请参阅 Contributing to 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应用程序框架集成。