Bokeh服务器在一台计算机上,服务另一台计算机

问题描述 投票:3回答:2

可能是一个简单的问题。我是新手

我有一台本地电脑(电脑'A')和一台远程电脑(电脑'B')。

我想在B上运行一个散景服务器,当我浏览到localhost:8000时,结果显示在A的浏览器中。

首先我在B上创建了这个文件。它只是一个带滑块的简单图。滑动滑块并更改绘图。它在A上运行时有效。

import sys
import numpy as np
from tornado.ioloop import IOLoop

from bokeh.application.handlers import FunctionHandler
from bokeh.application import Application
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, Slider
from bokeh.plotting import figure
from bokeh.server.server import Server

def modify_doc(doc):

    # Initialize the data
    power = 1
    x = np.arange(10)
    y = x**power

    # Initialize the plot and slider
    p = figure()
    p_source = ColumnDataSource(data=dict(x=x, y=y))
    p.line('x', 'y', source=p_source)
    s = Slider(start=0, end=10, value=1, step=.1, title="multiplier")

    # When the slider is changed, redraw the plot
    def callback(attr, old, new):
        x = p_source.data['x']
        y = x**s.value
        p_source.data = dict(x=x, y=y)
    s.on_change('value', callback)

    doc.add_root(column([p, s]))


def main(_):
    io_loop = IOLoop.current()
    bokeh_app = Application(FunctionHandler(modify_doc))
    server_kwargs = {}
    server_kwargs['port'] = 8000
    server = Server({'/': bokeh_app}, io_loop=io_loop, **server_kwargs)

    server.start()

    io_loop.add_callback(server.show, "/")
    io_loop.start()


if __name__ == '__main__':
    main(sys.argv[1:])

所以我把这个文件复制到B,然后我在S上运行它并输入:

python barebones.py

然后在A I键入:

ssh [email protected] -N -D 7000

注意我键入7000而不是8000.我试过了两个;我不明白为什么我在网上看到的一些东西告诉我在那里使用不同的数字。

接下来,我打开Firefox>首选项>网络代理>设置>手动代理配置。我将SOCKS主机设置为'localhost'(不带引号)并将端口设置为7000并选择SOCKSv5。单击确定。在Firefox的地址栏中,浏览到http://localhost:8000。 (注意我说8000没有7000.再次,不确定这是否正确,但我尝试了各种排列。)它说“无法连接”。

我尝试在脚本中插入它但它似乎没有任何影响。也许我离开这里:

from bokeh.server.util import create_hosts_whitelist
allow_websocket_origin = ['0.0.0.0:8000']
port=8000
create_hosts_whitelist(allow_websocket_origin, port)

我知道在命令行中使用“bokeh serve ...”命令运行散景服务器有另一种方法,但我正在尝试创建一个独立的脚本。

嘎。这可能很简单。我错过了什么?

python server bokeh
2个回答
1
投票

你试过以下吗?

B上,运行:

bokeh serve filename.py --address 0.0.0.0

然后,您可以使用URL http://Bs_name_or_ip_address:5006/从另一台计算机访问该应用程序。如果B计算机上运行了防火墙,则必须允许端口上的传入流量。

要覆盖默认端口号(5006),请使用--port NNNN参数。

另见:https://bokeh.pydata.org/en/latest/docs/reference/command/subcommands/serve.html


1
投票

以下命令适用于散景1+版本

散景服务--show filename.py --allow-websocket-origin = *:5006


1
投票

我知道这个问题真的很老但我遇到了类似的问题,并设法使用此处发布的建议来解决它:https://groups.google.com/a/continuum.io/forum/#!topic/bokeh/CmweAdzkWXw

也许这有助于其他人:

在Bokeh将运行的节点上:

bokeh serve &
ssh -NfR 5006:localhost:5006 user@gateway

在本地计算机(例如,笔记本电脑)上:

ssh -NfL localhost:5006:localhost:5006 user@gateway

现在,您应该能够导航到http://localhost:5006以访问在网关后面的节点上运行的Bokeh。

© www.soinside.com 2019 - 2024. All rights reserved.