一台计算机上的散景服务器,为另一台计算机提供服务

时间:2018-01-06 19:47:54

标签: python server bokeh

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

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

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

首先我在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上键入:

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)

我知道还有另一种使用"散景服务运行散景服务器的方法......"在命令行执行命令,但我尝试创建一个独立的脚本。

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

4 个答案:

答案 0 :(得分:1)

您是否尝试过以下操作?

B上,运行:

bokeh serve filename.py --address 0.0.0.0

然后,您可以使用网址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)

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

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

答案 2 :(得分: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。

答案 3 :(得分:0)

除了上述答案外,有时bokeh还会显示

拒绝来自Origin http的websocket连接:// :8000;采用 --allow-websocket-origin =:8000或将BOKEH_ALLOW_WS_ORIGIN =:8000设置为允许;目前,我们允许起源{'localhost:8000'}

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

bokeh_server_ip_address是要在其中托管bokeh应用程序的远程服务器ip