! `Xuất bản` _ ! `Kiểm tra` _ Gói Python này thêm các chức năng gọi quy trình từ xa [RPC] cơ bản vào ZeroMQ. Kiến trúc lệnh/dịch vụ được hỗ trợ cho phép tuần tự hóa phức tạp của Dữ liệu xác định người dùng và triển khai trông hiện đại. PIP Cài đặt pyzmqrpc3 Triển khai một lớp cụ thể của ICMAD lớp giao diện có thể de/serialize chính nó và có một hàm tạo mặc định [tức là có thể được xây dựng mà không có bất kỳ đối số nào]: từ việc nhập nhập tùy chọn Từ ICMand nhập ZMQRPC Lớp SimpleCommand [ICMAnd]: def __init __ [ self, param1: tùy chọn [str] = none, param2: tùy chọn [str] = none]: super[].__init__[] tự .__ param1 = param1 hoặc ‘ tự .__ param2 = param2 hoặc ‘ @property def param1 [self] -> str: tự trả lại .__ param1 @property def param2 [self] -> str: tự trả lại .__ param2 def set_command_state [tự, trạng thái: dict] -> none: tự .__ param1 = state [‘param1,] tự .__ param2 = state [‘param2,] def get_command_state [self] -> dict: Quay trở lại Dict [ param1=self.param1, param2=self.param2, ] Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là Cần thiết để sắp xếp dữ liệu lệnh giữa máy khách và máy chủ. Trách nhiệm của người dùng là đảm bảo rằng việc thực hiện những điều này Phương pháp là chính xác để tránh mất dữ liệu. Cả máy khách và phía máy chủ đều cần phải nhận thức được tất cả các hệ thống Lệnh triển khai. Thực hiện một chức năng dịch vụ cụ thể kế thừa từ IService và# Giới thiệu
# Cài đặt
# Cách sử dụng
Xử lý một loại lệnh của máy chủ:
từ việc nhập nhập tùy chọn
Từ ICMand nhập ZMQRPC
Lớp SimpleCommand [ICMAnd]:
def __init __ [
print[
param1: tùy chọn [str] = none,
command.param1,
command.param2,
]
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là
dict[
param1=command.param1,
param2=command.param2,
]
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là
Cần thiết để sắp xếp dữ liệu lệnh giữa máy khách và máy chủ.
Trách nhiệm của người dùng là đảm bảo rằng việc thực hiện những điều này
Phương pháp là chính xác để tránh mất dữ liệu.
Cả máy khách và phía máy chủ đều cần phải nhận thức được tất cả các hệ thống
Lệnh triển khai.
Thực hiện một chức năng dịch vụ cụ thể kế thừa từ IService và
Xử lý một loại lệnh của máy chủ:
từ ZMQRPC nhập iservice
lớp simpleservice [iservice]:
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là
server.register_service[
command_class=SimpleCommand,
service=SimpleService[],
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là*actual* command class and an *instance*
Cần thiết để sắp xếp dữ liệu lệnh giữa máy khách và máy chủ.
Trách nhiệm của người dùng là đảm bảo rằng việc thực hiện những điều này
server.start[]
Phương pháp là chính xác để tránh mất dữ liệu.
Cả máy khách và phía máy chủ đều cần phải nhận thức được tất cả các hệ thống
Lệnh triển khai.
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là
client.execute_remote[
Cần thiết để sắp xếp dữ liệu lệnh giữa máy khách và máy chủ.
]
Hai phương thức, đặt*lệnh*state [] và nhận*lệnh*state [], là
Cần thiết để sắp xếp dữ liệu lệnh giữa máy khách và máy chủ.
Trách nhiệm của người dùng là đảm bảo rằng việc thực hiện những điều này
Phương pháp là chính xác để tránh mất dữ liệu.
Cả máy khách và phía máy chủ đều cần phải nhận thức được tất cả các hệ thống
Lệnh triển khai.
Thực hiện một chức năng dịch vụ cụ thể kế thừa từ IService và
Xử lý một loại lệnh của máy chủ:
từ ZMQRPC nhập iservice
lớp simpleservice [iservice]:
def __call __ [self, lệnh: SimpleCommand] -> Tùy chọn [Đối tượng]:
SimpleCommand được thực hiện với các params {0} và và {1}.
Trả về văn bản phản hồi Simpleservice cho SimpleCommand là % S S S SPR STR [
Mặc dù về mặt kỹ thuật có thể tạo một dịch vụ để xử lý nhiều hơn
hơn một lệnh,
nó rất được khuyến khích từ quan điểm kiến trúc để cống hiến
Một dịch vụ cho một loại lệnh.
Các dịch vụ triển khai không cần phải hiển thị ở phía khách hàng
Từ quan điểm của tổ chức mã.
Về phía máy chủ, hãy tạo máy chủ RPC Zeromq:
Từ ZMQRPC Nhập ZMQRPCServer
Server = ZMQRPCServer [
ZMQ_REP_BIND_ADDRESS = xông TCP: //*: 30000,
username/password.
Đăng ký tất cả các dịch vụ:
Lưu ý rằng cuộc gọi này lấy lớp lệnh *thực tế *và một phiên bản * *
của chức năng dịch vụ.
Sau khi đăng ký tất cả các dịch vụ, hãy khởi động máy chủ RPC:
Về phía máy khách, tạo một máy khách kết nối với điểm cuối máy chủ đó:
Client = ZMQRPCClient [
ZMQ_REQ_ENDPOINTS = [xông TCP: // LocalHost: 30000,],
Có các lệnh thực thi máy khách trên máy chủ:
Lệnh = SimpleCommand [param1 = xông value1, param2 = giá trị2,],
Phiên bản chủ đề, ZMQReceiverthread, có thể được sử dụng để kiểm tra hoặc với
Các ứng dụng có thể đang chạy nhiều luồng máy chủ.
## ZMQSender
Sau khi tạo, nó bắt đầu một ổ cắm quán rượu và/hoặc tạo ổ cắm lại.
Ổ cắm REQ có thể trỏ đến nhiều điểm cuối, sau đó sử dụng vòng tròn
gửi tin nhắn.
ZMQSender thực hiện phương thức gửi [] gửi tin nhắn.
## ZMQProxy
Chuyển tiếp tin nhắn từ một ổ cắm phụ
một cặp người nhận/người gửi.
## ZMQRPCServer/Thread
Dịch vụ thực hiện [các] dịch vụ có thể được thực hiện từ xa bằng cách nhận một
loại lệnh.
Nó kế thừa chức năng ZMQReceiver để nghe các tin nhắn trên
Đại diện hoặc ổ cắm phụ.
Tuy nhiên, nó ghi đè phương thức xử lý*tin nhắn*đến [] để giảm dần
Tin nhắn lệnh, xác định loại của họ và thực hiện dịch vụ tương ứng
implementation.
Phiên bản luồng, ZMQRPCServerThread, có thể được sử dụng để kiểm tra hoặc với
Các ứng dụng có thể đang chạy nhiều luồng máy chủ.
## ZMQRPCCLIENT
Thực hiện một dịch vụ được triển khai từ xa trên một quán rượu hoặc ổ cắm lại bằng cách sử dụng
Lệnh đối số.
Đối với ổ cắm quán rượu, không có thông điệp phản hồi nào được dự kiến.
Nó kế thừa chức năng ZMQSender để gửi tin nhắn qua dây.
## Tôi ra lệnh
Lớp giao diện cơ sở cho tất cả các loại lệnh cụ thể.
Nó thực thi việc thực hiện hai phương pháp; đặt*lệnh*state [] và
get*command*state[].
Hai phương pháp này rất cần thiết trong việc sắp xếp bất kỳ dữ liệu người dùng phức tạp nào từ
phía khách hàng về phía máy chủ.
## iservice
Lớp giao diện cơ sở cho tất cả các chức năng dịch vụ cụ thể.
Nó thực thi việc thực hiện phương thức ** cuộc gọi ** [] là mục nhập
Điểm xử lý một loại lệnh nhất định ở phía máy chủ.
# Proxy tiêu chuẩn có sẵn
Một số proxy có sẵn trong hộp:
Req to req bằng zmqproxysub2req/thread
Sub to Pub bằng phương tiện của ZMQProxysub2Pub/Thread
Rep to pub bằng phương tiện của zmqproxyRep2pub/thread
Rep to req bằng ZMQProxyRep2Req/Thread
Buffed rep to req qua zmqbufferedproxyRep2Reqthread
Mỗi proxy/chủ đề proxy này sẽ nhận được thông báo từ đầu vào
Định dạng/ổ cắm và điều chỉnh nó vào ổ cắm đầu ra.
Một mô hình có thể là thu thập tất cả các mẫu từ tất cả các quy trình phụ trên một trang web
và ghép kênh thông qua proxy một cách đáng tin cậy trên ổ cắm rep/req.
Lưu ý rằng khi sử dụng kết nối quán rượu/phụ, không có thông báo trả lại hoặc
Trong trường hợp gọi phương pháp, bất kỳ phản ứng chức năng nào cũng bị loại bỏ.
Proxy rep/req được đệm lặng lẽ sử dụng một ổ cắm pub/sub để giới thiệu một
có nghĩa là để đệm thông điệp và yêu cầu phương pháp.
# Các vấn đề và giới hạn đã biết [Kil]
Chỉ có loại thử nghiệm localhost được thực hiện với mật khẩu.
Không chắc chắn nếu Auth hoạt động trên các kết nối từ xa.
INPROC: // Vận chuyển ZMQ không được hỗ trợ bằng cách thực hiện hiện tại.
# Ghi chú
Xin lưu ý rằng việc triển khai này rất trước khi trưởng thành, mặc dù nó hoạt động
Tốt cho các dự án hiện đang được sử dụng và đã hoạt động ổn định
trong nhiều tháng.
Để biết thêm thông tin, hãy truy cập kho lưu trữ dự án tại //github.com/brgirgis/pyzmqrpc3