The ZeroMQ backend for enchannel
.
npm install enchanell-zmq-backend
Given a currently running Jupyter runtime, creates RxJS subjects (Observable
s and Observer
s) for four of the Jupyter channels:
- shell
- control
- iopub
- stdin
enchannel-zmq-backend
exports exactly one function
var ez = require('enchannel-zmq-backend')
that takes in a kernel runtime object (this matches the on-disk JSON):
var runtimeConfig = {
stdin_port: 58786,
ip: '127.0.0.1',
control_port: 58787,
hb_port: 58788,
signature_scheme: 'hmac-sha256',
key: 'dddddddd-eeee-aaaa-dddd-dddddddddddd',
shell_port: 58784,
transport: 'tcp',
iopub_port: 58785
}
var channels = ez(runtimeConfig)
The resulting channels
are all the sockets for kernel interaction:
> Object.keys(channels)
[ 'shell', 'control', 'iopub', 'stdin' ]
Subscribing to iopub:
var obs = channels.iopub.subscribe(msg => {
console.log(msg);
}
// later, run obs.dispose() to unsubscribe
Since these are RxJS Observables, you can also filter
, map
, scan
and many other operators:
channels.iopub.filter(msg => msg.header.msg_type === 'execute_result')
.map(msg => msg.content.data)
.subscribe(x => { console.log(`DATA! ${util.inspect(x)}`)})
Executing code will rely on sending an execute_request
to the shell
channel.
var message = {
header: {
msg_id: `execute_9ed11a0f-707e-4f71-829c-a19b8ff8eed8`,
username: 'rgbkrk',
session: '00000000-0000-0000-0000-000000000000',
msg_type: 'execute_request',
version: '5.0',
},
content: {
code: 'print("woo")',
silent: false,
store_history: true,
user_expressions: {},
allow_stdin: false,
},
};
Until we make changes, you'll need to have at least one subscription before you can send on a channel.
> channels.shell.subscribe(console.log)
> channels.shell.send(payload)
> Message {
header:
{ username: 'rgbkrk',
msg_type: 'execute_reply',
msg_id: '0f6d37f3-56a2-41fd-b3ed-90cc189ac423',
version: '5.1',
session: '40472e70-e008-48d1-9537-55837a905c05',
date: '2016-01-12T00:39:44.686986' },
parent_header:
{ username: 'rgbkrk',
session: '00000000-0000-0000-0000-000000000000',
version: '5.0',
msg_id: 'execute_9ed11a0f-707e-4f71-829c-a19b8ff8eed8',
msg_type: 'execute_request' },
metadata:
{ dependencies_met: true,
engine: '34d73425-4f04-4b57-9bc7-b46e3100e1fd',
status: 'ok',
started: '2016-01-12T00:39:44.684534' },
content:
{ status: 'ok',
execution_count: 60,
user_expressions: {},
payload: [] } }