Python 一台计算机上的Bokeh服务器,服务于另一台计算机

Python 一台计算机上的Bokeh服务器,服务于另一台计算机,python,server,bokeh,Python,Server,Bokeh,可能是个简单的问题。我是个新手 我有一台本地计算机(计算机“a”)和一台远程计算机(计算机“B”) 我想在B上运行bokeh服务器,并在浏览到localhost:8000时将结果显示在a的浏览器中 首先,我在B上创建了这个文件。它只有一个带滑块的简单绘图。滑动滑块后,绘图将更改。当我在A上运行它时,它工作 import sys import numpy as np from tornado.ioloop import IOLoop from bokeh.application.handlers

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

我有一台本地计算机(计算机“a”)和一台远程计算机(计算机“B”)

我想在B上运行bokeh服务器,并在浏览到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,并通过ssh在B上运行它,然后键入:

python barebones.py
然后在I类型上:

ssh root@123.123.123.123 -N -D 7000
注:我输入了7000而不是8000。我两个都试过了;我不明白为什么我在网上读到的一些东西告诉我使用不同的号码

接下来,我打开Firefox>首选项>网络代理>设置>手动代理配置。我将SOCKS主机设置为“localhost”(不带引号),端口设置为7000,然后选择SOCKSv5。单击“确定”。在Firefox的地址栏中,浏览至。(注意,我说的是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)
我知道还有另一种方法可以在命令行中使用“bokehserve…”命令来运行bokeh服务器,但如果可能的话,我正在尝试创建一个独立的脚本


嘎。这应该很简单。我遗漏了什么?

您尝试过以下方法吗

B
上,运行:

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

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

另见:


以下命令适用于bokeh 1+版本

bokeh serve --show filename.py --allow-websocket-origin=*:5006

我知道这个问题真的很老,但我遇到了类似的问题,并使用此处发布的建议解决了它:

也许这对其他人有帮助:

在Bokeh将运行的节点上:

bokeh serve &
ssh -NfR 5006:localhost:5006 user@gateway
在本地计算机(如笔记本电脑)上:


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

除了上面的答案,Bokeh有时会说

拒绝来自源站的websocket连接http://:8000;使用 --允许websocket原点=:8000或设置BOKEH_允许\u WS_原点=:8000以允许此操作;目前我们允许源代码{'localhost:8000'}

bokeh serve --show file_name --address 0.0.0.0 --port=8000 --allow-websocket-origin=<bokeh_server_ip_address>:8000
bokeh serve--显示文件名--地址0.0.0.0--端口=8000--允许websocket源代码=:8000
bokeh_服务器ip_地址是您希望承载bokeh应用程序的远程服务器ip

bokeh serve --show file_name --address 0.0.0.0 --port=8000 --allow-websocket-origin=<bokeh_server_ip_address>:8000