2009-07-22 10 views
14

Tất cả những gì tôi muốn làm là thực hiện một số cuộc gọi RPC qua ổ cắm. Tôi có một máy chủ mà phụ trợ công cụ chạy jython 2,5. Tôi cần phải thực hiện một số cuộc gọi từ một máy chủ frontend chạy Django trên CPython. Tôi đã đập đầu vào một bức tường nhận được bất kỳ hình thức IPC nào.fast-ish python/jython IPC?

Danh sách những thứ tôi đã cố gắng:

  • Apache Thrift không có bất kỳ phiên bản thực tế, chỉ cần chụp. Tôi muốn sử dụng một cái gì đó ổn định.
  • JSON-RPC thú vị và có thể chạy trên ổ cắm, nhưng trong thực tế hầu hết các implementations chỉ có vẻ hoạt động trên HTTP. Chi phí HTTP là chính xác những gì tôi đang cố gắng tránh.
  • Protocol Buffers thực sự chỉ là giao thức tuần tự hóa. Từ những gì tôi thu thập protobuf cung cấp giao diện thế hệ cho RPC, nhưng nó chỉ là giao diện. Trên thực tế việc viết tất cả các mã kết nối là tùy thuộc vào người dùng. Nếu tôi sẽ bị mắc kẹt bằng cách sử dụng ổ cắm, tôi sẽ chỉ sử dụng JSON để tuần tự hóa. Nó đơn giản hơn và faster.
  • Pyro không hoạt động đúng với Jython với tư cách máy chủ. Một số loại vấn đề thời gian chờ socket. Tôi đã gửi một tin nhắn đến danh sách gửi thư.
  • pysage Yay để gửi tin nhắn! Chỉ có nó đòi hỏi python 2.6 hoặc module xử lý (đã biên dịch phần mở rộng). Jython là phiên bản 2.5 và không cho phép các phần mở rộng được biên dịch.
  • Candygram là một giải pháp thay thế thú vị đối với trang trí, nhưng theo như tôi có thể nói, nó không được duy trì. Tôi thậm chí không thử nó với Jython. Bất kỳ kinh nghiệm với nó?
  • Twisted Perspective Broker Xoắn không hoạt động trên Jython.

Tôi biết rằng sẽ rất nhanh khi thực hiện điều này với XML-RPC, điều này khiến tôi càng cáu kỉnh hơn. Tôi muốn tránh các chi phí của HTTP, nhưng đồng thời tôi thực sự không muốn để có được xuống và bẩn với ổ cắm để thực hiện giao thức của riêng tôi. Tôi sẽ làm sai nếu tôi làm.

Bất kỳ ý tưởng nào? Tôi có thể sẽ khóc trong khoảng 20 phút và sau đó chỉ cần sử dụng XML-RPC.

+0

btw, tôi chỉ tìm thấy giải pháp này đến câu hỏi của tôi: http://bert-rpc.org/ – Kobold

Trả lời

6

Bạn đã xem Hessian chưa? Từ lời giới thiệu:

Các dịch vụ web nhị phân Hessian giao thức làm cho các dịch vụ web có thể sử dụng mà không đòi hỏi một khuôn khổ lớn, và không có học thêm một súp bảng chữ cái của giao thức. Bởi vì nó là một giao thức nhị phân, nó là rất phù hợp để gửi dữ liệu nhị phân mà không cần phải mở rộng giao thức với tệp đính kèm.

Ứng dụng này có máy khách Python và máy chủ Java (và hơn thế nữa).

Cập nhật: Nếu bạn đã chết trước HTTP, tại sao không chỉ sử dụng SocketServerpickle? Không cần nhiều giao thức, khó có thể sai. Gửi/nhận các chuỗi đã chọn với các tiền tố có độ dài.

+0

Hessian sử dụng HTTP, mà tôi muốn tránh. – Kobold

0

Bạn đã từng nghĩ đến việc sử dụng CORBA chưa? Nó nhanh chóng, di động và hướng đối tượng ...

Tôi chỉ sử dụng nó ở phía Java (tôi nghĩ bạn có thể sử dụng một nhà môi giới java thuần túy không có vấn đề gì từ Jython), và với IIOP bạn sẽ có thể tương thích với máy khách CPython.

+0

Nó có thể rất tốt đến đó. Ngay bây giờ giao diện của chúng tôi đang phát triển khá nhanh, và CORBA có vẻ quá nặng. Nhưng có, ý nghĩ đã xảy ra với tôi. – Kobold

+0

Tôi không nghĩ rằng nó quá nặng, theo nghĩa hiệu năng hay bộ nhớ, nó cũng được sử dụng trong các hệ thống nhúng ... nếu bạn có ý là nó quá cồng kềnh để triển khai tất cả các dịch vụ mà nó có thể cung cấp sử dụng, có, sau đó bạn đang rất đúng^_^ – fortran

2

Hai trông thú vị nhất đối với tôi:

  • GearmanPython bindings. Đó là khá nhanh hơn một chút bây giờ nó đã được viết lại trong C (ban đầu perl). Nó được sử dụng trong sản xuất (mặc dù tôi không thể chỉ ra bất kỳ ví dụ về các ràng buộc python được sử dụng trong sản xuất). Nó có giao diện rất thú vị (đối với tôi) vào MySQL và Postgresql. Cuối cùng, todays tweet từ Jacob Kaplan-Moss của Django.

  • RabbitMQ mặc dù vì đó chỉ là hàng đợi tin nhắn, bạn sẽ vẫn phải sắp xếp từng hàng các tin nhắn của riêng bạn trừ khi bạn cũng sử dụng celery.

+0

Hiện tại chúng tôi đang sử dụng cà rốt/RabbitMQ để thực hiện cuộc gọi đến máy chủ này một cách không đồng bộ, nhưng bây giờ chúng tôi muốn thực hiện các cuộc gọi đồng bộ. Tôi chắc chắn rằng tôi có thể xây dựng nó trên hàng đợi, nhưng nó không rõ ràng làm thế nào để làm điều đó một cách tốt đẹp. – Kobold

2

ưa thích của tôi .. zeroc's ice

+0

Băng trông rất thú vị. Chúng tôi không phải là một dự án mở, vì vậy tôi sẽ xem xét chi phí cho một giấy phép thương mại là bao nhiêu. – Kobold