从Node.js和Websockets访问IPython命令行

3

我该如何使用node.js (Express.js)创建一个web应用程序,可以访问python或ipython REPL命令行?我想要的实际上类似于IPython Notebook,但集成到一个node.js web应用程序中。我还考虑使用websockets实现在应用程序和服务器上的python实例之间进行低延迟、双向通信。

1个回答

2
使用ZMQ节点绑定,并直接使用与IPython相同的协议与内核通信,如果您想要为节点创建IPython笔记本,则可以创建一个节点内核(需要更新到最新的协议版本)。IPython Web服务器已经具有WebSocket,Emacs EIN已经通过WebSocket与服务器进行通信。
[编辑]
在评论后进行一些澄清。 关于笔记本,在打开笔记本Web应用程序时,涉及3个组件。
内核(K)-在我们的情况下是IPython内核,但可以是IJulia,IHaskell等 服务器(S)-在我们的情况下是Tornado 客户端(C)-笔记本的Html / Js前端
(K)使用ZMQ与(S)通信。 (S)作为桥梁执行ZMQ<-> WebSocket转换 (C)通过WebSocket与S通信。
ZMQ和Websocket上的数据传输是与语言无关的,因此您不需要关心(K),(S)或(C)的语言。 ZMQ和Websocket很可能不使用相同的传输方式,不使用相同的接口/IP地址,也不使用相同的端口。

1
顺便说一下,我们正在尝试使我们的JS模块化。我们非常希望能够拥有一个kernel.js文件,它可以作为单独的模块在node.js和浏览器中使用。我们不是JavaScript开发人员,任何帮助都非常感激。请随时在GitHub上打开问题/PR。 - Matt
啊啊啊!有两个问题。首先,有两个kernel.js,一个是Web应用程序的,另一个在我的Gist中。第二,由于我回答了所有的问题,我开始混淆事情了。所以忘记我说的话吧。你的问题是ipython notebook可以生成许多内核,因此c.IPKernelApp.hb_port将不起作用。你可以使用ipython kernel生成唯一的内核,它将遵循配置,或者更好的方法是根本不设置端口,让它自己选择并从它发出的连接文件中读取。 - Matt
这很有道理... 但是,我现在遇到了这个错误:ImportError: No module named zmq.subprocesskernel (http://pastebin.com/dTzmmTF6)。IPython似乎不再包含此模块,它可能在重构中被重命名了吗? - user1027169
可能在我写这篇文章的时候,需要对IPython进行修补,但现在已经不需要了。但是,如果您想与Python内核交互,您不应该需要更改内核启动器类。如果我能看到代码的一部分,那么帮助您会更容易些。 - Matt
啊,所以如果我使用 node kernel 而不是 notebook,就不会出现错误,这对现在来说还可以。但是我似乎没有看到任何心跳信号。我该如何从 node 向 IPython 发送一个简单的“hello world”消息呢?我会更新 gist 来展示我正在尝试的内容。 - user1027169
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接