从 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_port
、c.IPKernelApp.ipub_port
和c.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 服务器