Hướng dẫn zeromq rpc python - con trăn zeromq rpc

! `Xuất bản` _

! `Kiểm tra` _

# Giới thiệu

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.

# Cài đặt

PIP Cài đặt pyzmqrpc3

# Cách sử dụng

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à

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]:

  1. 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

  1. 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

  1. 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

  1. Server = ZMQRPCServer [

ZMQ_REP_BIND_ADDRESS = xông TCP: //*: 30000,

username/password.

Đăng ký tất cả các dịch vụ:

  1. 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

Bài Viết Liên Quan

Chủ Đề