В настоящее время я создаю серверную часть ядра языка Erlang для IPython и тестирую ее в консоли.
Что у меня работает:
- Запустите консоль ipython и ядро erlang.
- Ядро Erlang читает содержимое файла kernel.json, который содержит все номера портов для zmq.
- Создайте привязки zmq для сокетов
shell
,heartbeat
,control
,iopub
с помощью библиотеки erlzmq2. - Созданы функции для разбора сообщений от IPython.
- Создайте процесс для сервера Heartbeat, на котором он будет работать, и возвращать сообщения в IPython.
- Created a process for the Shell Socket to receive and respond to the following messages
- kernel_info_request -> kernel_info_reply
- выполнить_запрос -> выполнить_ответ
- Also, the iopub socket sends these messages
- status
- пиаут
Если ты все еще со мной, все это работает. Появляется первое приглашение IPython In[1]:
, и я могу ввести код, отправить его на сервер и получить сообщение execute_request от ipython.
Однако моя проблема заключается в том, что после этой последовательности событий я получаю execute_request:
- отправил статус занятости в IPython
- выполнил код и захватил выходную строку
- отправил сообщение pyout в IPython
- отправил execute_reply в IPython
- отправил статус ожидания в IPython
После отправки этих сообщений ничего не происходит. Я больше не получаю сообщений от IPython, и выполнение кода не выводится на консоль, а также не появляется новое приглашение с запросом дополнительных данных от пользователя.
Мне просто интересно, отправляю ли я сообщения в правильном порядке или я отправляю правильные сообщения?