从 node.js 和 websockets 访问 IPython 命令行

Posted

技术标签:

【中文标题】从 node.js 和 websockets 访问 IPython 命令行【英文标题】:Accessing IPython command line from node.js and websockets 【发布时间】:2013-05-29 15:22:33 【问题描述】:

我将如何使用 node.js (Express.js) 创建一个可以访问 python 或 ipython REPL 命令行的 Web 应用程序?本质上,我希望有类似IPython Notebook 的东西,但集成到 node.js Web 应用程序中。我也在考虑使用 websockets 在应用程序和服务器上的 python 实例之间进行低延迟的双向通信。

【问题讨论】:

【参考方案1】:

使用 ZMQ 节点绑定,并使用same protocol than IPython 直接与内核对话,如果你想要 IPython notebook for node 你可以创建一个node kernle (需要更新最后的协议版本)。 IPython webserver 已经有 websocket 和 Emacs EIN 已经使用它通过 websocket 向服务器发送。

[编辑]

cmets 之后的一些澄清。 关于notebook,一开始打开notebook web app时会涉及到3个组件。

内核 (K) -- 在我们的例子中是 IPython 内核,但可以是 IJulia、IHaskell... 服务器 (S) -- 在我们的例子中是 Tornado 客户端 (C) -- 用于笔记本的 html/Js 前端

(K) 使用 ZMQ 与 (S) 交谈。 (S) 充当 ZMQWebsocket 转换的桥梁 (C) 通过 websocket 与 S 对话。

ZMQ 和 Websocket 上的线路与语言无关,因此您不必关心 (K)、(S) 或 (C) 的语言。 ZMQ 和 Websocket 的变化很大:not 使用相同的传输,not 使用相同的接口/ip,not 使用相同的端口。

【讨论】:

我无法找到有关如何以编程方式访问 IPython 网络笔记本的文档,因此我可以将其嵌入到我自己的应用程序中。有什么可用的吗? 我不确定 websocket 周围有很多文档。我会看看kernel.js、this 和可能this websocket/zmq 桥对消息只做了最小的更改(如果有的话)。 顺便说一下,我们正在尝试使我们的 JS 模块化。我们希望 喜欢 能够拥有一个 kernel.js 文件,该文件可以是一个单独的模块,并在 node.js 和浏览器中按原样使用。我们不是 javascript 开发人员,我们非常感谢任何帮助。不要犹豫,在 github 上打开 issue/PR。 所以我终于开始尝试从your example 实现这个(让节点与 IPython 对话)。我对 zeromq 端口有一些问题。 kernel.js 中的三个端口应该与c.IPKernelApp.hb_portc.IPKernelApp.ipub_portc.IPKernelApp.shell_port 匹配对吧?我将这些添加到我的node 配置文件中,但是当我连接到我的笔记本时,我仍然得到随机端口,例如[NotebookApp] Connecting to: tcp://127.0.0.1:57405。关于我在这里缺少什么以使您的示例正常工作的任何建议? 不,c.IPKernelApp.hb_port ... 是 ZMQ 端口,kernel.js 连接到形成 ZMQ-websoket 桥的龙卷风。因此端口(和协议)是不同的。 Stack-Overflow 解释起来可能有点小。你的项目是公开的,还是在 IPython-dev(at)scipy.org 上提出问题

以上是关于从 node.js 和 websockets 访问 IPython 命令行的主要内容,如果未能解决你的问题,请参考以下文章

如何对基于node.js 的websocket进行并发访问的性能测试

url 路径中带有通配符的 Node.js 和 Websocket

从 C# 程序连接基于 node.js 的 socket.io WebSocket 服务器

node.js 和 socket.io。 websocket的传输类型配置?

Node Js 和 websockets

如何从 php 或 node.js 获取 websocket url 路径