【发布时间】:2014-11-06 15:56:07
【问题描述】:
我在运行 ipython 笔记本服务器时遇到问题。我为笔记本编写了一系列自定义 ROI(感兴趣区域)小部件,允许用户在笔记本中显示的图像上绘制矩形和椭圆等形状,然后将有关形状的信息发送回服务器上运行的 python .所有信息都通过小部件 traitlets 传递;形状信息位于object 类型的handles traitlet 中。当我在端口 8888(默认)上本地运行它并使用在同一台计算机上运行的 Firefox 访问它时,一切正常。 (本例中的系统是运行 OSX Yosemite 的 Mac)。
现在我尝试通过从另一台计算机(在本例中为 ubuntu linux)建立 ssh 连接并将本地端口 8888 转发到主机上的 8888 来远程访问它。这几乎可以工作:在客户端上运行的 firefox 能够访问 ipython 笔记本服务器,在笔记本中执行代码等。ROI 小部件也显示并且似乎工作正常,除了一件事:没有关于绘制的形状的信息使它回来到服务器。
这不仅仅是远程访问的问题(尽管这对我的预期用途来说是最重要的)。如果我在本地运行,但使用 8888 以外的端口,我会遇到完全相同的问题。例如,如果我在 ipython_notebook_config.py 中将端口设置为 9999,运行笔记本服务器并使用本地 Firefox 访问它,我得到的正是同样的问题。同样,如果我使用所有默认设置运行两次ipython notebook,则第二个实例绑定端口 8889,因为第一个实例绑定了 8888。当我使用本地 Firefox 访问运行在 8888 的服务器时,一切正常;当我访问在 8889 上同时运行的服务器时,我的小部件再次无法将信息发送回服务器。如果我使用 --debug,我可以看到所有的 comm_msgs 都通过了。 8888 上运行的服务器按预期接收包含形状信息的消息。这些消息根本不会显示在运行在 8889 的服务器的日志中。
有什么想法吗?
【问题讨论】:
-
这很奇怪。通信消息应通过与执行消息相同的 websocket 通道发送。我想不出为什么一个会起作用而另一个不会。