Đây là tài liệu cần thiết để tồn tại, nhưng việc triển khai giao thức dây được thực hiện trong một single object, do đó không quá khó để bẻ khóa từ đó. Các message spec doc bạn liên kết bao gồm các nội dung cấp ứng dụng của mỗi lĩnh vực, nhưng không phải như thế nào nó thực sự được tuần tự hóa trên zeromq. Giả sử bạn có một mesage, như được mô tả trong tài liệu đó, định dạng dây là khá đơn giản. Đó là một thông điệp nhiều phần dữ liệu zeromq của ít nhất sáu phần:
- Các bộ phận nhắn hàng đầu là những bản sắc định tuyến zeromq (zero-to-many)
- Đây là theo sau là một thông điệp delimiter, với các byte
<IDS|MSG>
- HMAC
digest
của thông điệp (một chuỗi rỗng ''
nếu xác thực bị vô hiệu hóa)
header
parent_header
metadata
content
header
, parent_header
, metadata
, và content
đều được mô tả trong tin nhắn doc - đây là những từ điển, và tuần tự để byte với bất cứ điều gì serialization hiện đang được sử dụng. Mặc định trong IPython là JSON được mã hóa utf8, nhưng cho phép tuần tự hóa tùy ý (msgpack là không phổ biến nhất mặc định). Chưa được mô tả trong tài liệu là digest
, được sử dụng để xác thực. Đây là một thông báo MD5 HMAC Digest. Chìa khóa cho thông báo được tìm thấy trong trường key
của tệp kết nối. 'Thông báo' được sử dụng bởi thông báo HMAC là nối các byte của tiêu đề được tuần tự hóa, parent_header, siêu dữ liệu và nội dung theo thứ tự được gửi qua dây.
Bạn có thể vô hiệu hóa ký thông điệp bằng cách xác định giá trị cấu hình
Session.key = ''
đến các bộ phận IPython liên quan đến mã của bạn, trong trường hợp lĩnh vực tiêu hóa sẽ luôn là một chuỗi rỗng ''
. Tôi sẽ khuyên bạn nên làm điều này trong khi bắt đầu, vì vậy bạn có thể làm việc ra các phần thú vị hơn của việc thực hiện đầu tiên.
Dưới đây là một yêu cầu thực thi mẫu và trả lời của nó thực sự được gửi bởi IPython.
Yêu cầu:
[
<IDS|MSG>
6ea6b213262402cc1ad3c1d3e342a9f6
{"date":"2013-04-27T23:22:13.522049","username":"minrk","session":"5b03b89a-93c9-4113-bb85-17ba57233711","msg_id":"c6d0f85e-fc25-4f1e-84e1-3d706b615393","msg_type":"execute_request"}
{}
{}
{"user_variables":[],"code":"1\n","silent":false,"allow_stdin":true,"store_history":true,"user_expressions":{}}
]
và trả lời nó:
[
5b03b89a-93c9-4113-bb85-17ba57233711
<IDS|MSG>
47d1052f6e8f333d18480938ca91719b
{"date":"2013-04-27T23:22:13.528239","username":"kernel","session":"d7eb303b-d2d0-4723-aef2-738545a8da11","msg_id":"9ed1d332-398c-4132-b203-1e7bf8fed712","msg_type":"execute_reply"}
{"date":"2013-04-27T23:22:13.522049","username":"minrk","session":"5b03b89a-93c9-4113-bb85-17ba57233711","msg_id":"c6d0f85e-fc25-4f1e-84e1-3d706b615393","msg_type":"execute_request"}
{"dependencies_met":true,"engine":"645fb29f-37ab-40c9-bc01-b7fbfe3c2112","status":"ok","started":"2013-04-27T23:22:13.524114"}
{"status":"ok","execution_count":2,"user_variables":{},"payload":[],"user_expressions":{}}
]
Có một bài đăng blog, liên kết cho câu hỏi này, mô tả làm thế nào để thực hiện một http ipython kernel: // stackoverflow. com/questions/16240747/send-messages-from-other-languages-to-an-ipython-kernel – dirceusemighini
http://andrew.gibiansky.com/blog/ipython/ipython-kernels/ là những gì @dirceusemighini đang nói đến. –