##// END OF EJS Templates
New connect_request message type added.
Brian Granger -
Show More
@@ -97,7 +97,8 b' def make_kernel(namespace, kernel_factory,'
97 97
98 98 hb = Heartbeat(context, (namespace.ip, namespace.hb))
99 99 hb.start()
100 io.raw_print("Heartbeat REP Channel on port", hb.port)
100 hb_port = hb.port
101 io.raw_print("Heartbeat REP Channel on port", hb_port)
101 102
102 103 # Redirect input streams and set a display hook.
103 104 if out_stream_factory:
@@ -107,8 +108,11 b' def make_kernel(namespace, kernel_factory,'
107 108 sys.displayhook = display_hook_factory(session, pub_socket)
108 109
109 110 # Create the kernel.
110 return kernel_factory(session=session, reply_socket=reply_socket,
111 kernel = kernel_factory(session=session, reply_socket=reply_socket,
111 112 pub_socket=pub_socket, req_socket=req_socket)
113 kernel.record_ports(xrep_port=xrep_port, pub_port=pub_port,
114 req_port=req_port, hb_port=hb_port)
115 return kernel
112 116
113 117
114 118 def start_kernel(namespace, kernel):
@@ -76,6 +76,10 b' class Kernel(Configurable):'
76 76 # IPython shell's own shutdown).
77 77 _shutdown_message = None
78 78
79 # This is a dict of port number that the kernel is listening on. It is set
80 # by record_ports and used by connect_request.
81 _recorded_ports = None
82
79 83 def __init__(self, **kwargs):
80 84 super(Kernel, self).__init__(**kwargs)
81 85
@@ -144,6 +148,19 b' class Kernel(Configurable):'
144 148 time.sleep(self._poll_interval)
145 149 self.do_one_iteration()
146 150
151 def record_ports(self, xrep_port, pub_port, req_port, hb_port):
152 """Record the ports that this kernel is using.
153
154 The creator of the Kernel instance must call this methods if they
155 want the :meth:`connect_request` method to return the port numbers.
156 """
157 self._recorded_ports = {
158 'xrep_port' : xreq_port,
159 'pub_port' : pub_port,
160 'req_port' : req_port,
161 'hb_port' : hb_port
162 }
163
147 164 #---------------------------------------------------------------------------
148 165 # Kernel request handlers
149 166 #---------------------------------------------------------------------------
@@ -288,6 +305,15 b' class Kernel(Configurable):'
288 305 content, parent, ident)
289 306 io.raw_print(msg)
290 307
308 def connect_request(self, ident, parent):
309 if self._recorded_ports is not None:
310 content = self._recorded_ports.copy()
311 else:
312 content = {}
313 msg = self.session.send(self.reply_socket, 'connect_reply',
314 content, parent, ident)
315 io.raw_print(msg)
316
291 317 def shutdown_request(self, ident, parent):
292 318 self.shell.exit_now = True
293 319 self._shutdown_message = self.session.msg(u'shutdown_reply', {}, parent)
@@ -536,6 +536,30 b' Message type: ``history_reply``::'
536 536 }
537 537
538 538
539 Connect
540 -------
541
542 When a client connects to the request/reply socket of the kernel, it can issue
543 a connect request to get basic information about the kernel, such as the ports
544 the other ZeroMQ sockets are listening on. This allows clients to only have
545 to know about a single port (the XREQ/XREP channel) to connect to a kernel.
546
547 Message type: ``connect_request``::
548
549 content = {
550 }
551
552 Message type: ``connect_reply``::
553
554 content = {
555 'xrep_port' : int # The port the XREP socket is listening on.
556 'pub_port' : int # The port the PUB socket is listening on.
557 'req_port' : int # The port the REQ socket is listening on.
558 'hb_port' : int # The port the heartbeat socket is listening on.
559 }
560
561
562
539 563 Kernel shutdown
540 564 ---------------
541 565
General Comments 0
You need to be logged in to leave comments. Login now