可能是一个简单的问题。我是新手。
我有一台本地计算机(计算机“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
接着我在 A 上输入:
ssh root@123.123.123.123 -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…”命令运行bokeh服务器的方法,但是如果可能的话,我想创建一个独立的脚本。
唉,这应该很简单。我错过了什么?