Bokeh 0.12.4到0.12.5 - 代理Bokeh服务器的Twisted Server失败

时间:2017-04-20 11:00:14

标签: python websocket twisted bokeh

我使用扭曲的python服务器来托管链接到散景服务器上运行的应用程序的概述页面。扭曲的服务器将传入的请求(类似<globalip>:80)代理到散景服务器(在端口5006上)。

我决定使用扭曲的服务器,因为我希望能够使用anaconda python运行整个系统。使用散景0.12.4,此解决方案运行良好。

我希望下面的例子说明了我的服务器设置在散景版0.12.5上出现的问题。目前我怀疑带有websockets和扭曲服务器的东西出错了,但由于我对websockets缺乏经验,所以我不知道从哪里开始。

最佳示例

散景应用

散景服务器在localhost:5006上托管来自https://github.com/bokeh/bokeh/blob/master/examples/app/sliders.py的滑块应用。

  • 保存在Sliders / main.py
  • bokeh serve Sliders --port 5006 --host localhost:5006 --allow-websocket-origin=127.0.0.1:8080一起投放(我基本上通过反复试验得出--host--allow-websocket-origin的这种组合;这在散景0.12.4下工作。
  • (只是在没有服务器的情况下运行应用程序完全正常bokeh serve --show Sliders

Twisted服务器

Twisted服务器在127.0.0.1:8080上托管一个网站,其中包含指向127.0.0.1:8080/apps/Sliders的链接。如果用户调用此链接,则服务器将代理localhost:5006\Sliders上的散景服务器应用程序。

  • 使用python twisted_server.py
  • 运行

twisted_server.py

from twisted.internet import reactor  
from twisted.web import proxy, server  
from twisted.web.static import File

resource = File('./www/')  
resource.putChild('apps',proxy.ReverseProxyResource('localhost', 5006, ''))  
site = server.Site(resource)  
reactor.listenTCP(8080, site)  
reactor.run()

WWW / index.html中

<!DOCTYPE html>
<html lang="de">
<head>
  <title>Sliders</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

<p>
<a target="_blank" href="apps/Sliders">Sliders</a>          

在Bokeh 0.12.4下运行

conda install bokeh=0.12.4

通过上面的配置,一切运行正常。我可以在浏览器中打开127.0.0.1:8080,点击幻灯片应用程序的链接,该应用程序已打开,可以与之互动。

在Bokeh 0.12.5下运行

conda install bokeh=0.12.5

上面的配置允许我打开127.0.0.1:8080。点击幻灯片应用程序的链接只会产生一个空白页面。散景服务器shell的输出如下所示。

由于在散景0.12.5中已弃用--host参数,我已在--allow-websocket-origin尝试了各种参数组合,但这些参数组合也无效。

如果有人可以帮我解密错误信息GET 400 ...,那将非常感激。

散景服务器输出

C:\Users\Benjamin\Anaconda2\lib\site-packages\bokeh\command\subcommands\serve.py:325: UserWarning: The --host parameter is deprecated because it is no longer needed. It will be removed and trigger an error in a future release. Values set now will be copied to --allow-websocket-origin. Depending on your use case, you may need to set current --host values for 'allow_websocket_origin' instead.
"The --host parameter is deprecated because it is no longer needed. "
2017-04-20 12:18:00,375 Starting Bokeh server version 0.12.5
2017-04-20 12:18:00,454 Starting Bokeh server on port 5006 with applications at paths ['/Sliders']
2017-04-20 12:18:00,454 Starting Bokeh server with process id: 2308
2017-04-20 12:18:25,055 200 GET /Sliders (127.0.0.1) 543.00ms
2017-04-20 12:18:25,915 400 GET /Sliders/ws?bokeh-protocol-version=1.0&bokeh-session-id=FICIeGnPQLGK7363ORLcpTPMVBCiPffpOgGx2qdy5AdM (127.0.0.1) 0.00ms

1 个答案:

答案 0 :(得分:0)

这可能与以下内容重复:

bokeh serve running but can't access with browser

在这种情况下,您需要从最近发布的Tornado 4.5降级(或升级到最新的Bokeh&#34; dev&#34;具有不兼容性修复的版本)。

编辑:我sholud还注意到很快就会在默认的repo中有一个碰撞的conda构建,它已经更新了Tornado deps,排除了Tornado 4.5,但我不确定何时知道这将发生(可能在今天晚些时候)