2012-06-26 21 views
6

Trong C chúng ta có Sockets và descriptor, có thể chỉ cần lấy một trong số chúng và đưa chúng qua Thread, điều này giúp bạn có thể chấp nhận các kết nối đến và cung cấp làm việc với một Chủ đề bạn thích và Chủ đề có thể tự gửi phản hồi.ZeroMQ: làm thế nào để đạt được sự đa luồng giống như C

Câu hỏi của tôi là, làm thế nào tôi có thể đạt được điều này với ZeroMQ? Với mẫu Request-Reply có vẻ như tôi không thể gửi và nhận không đồng bộ, các phản hồi phải theo thứ tự, mục tiêu của tôi là có nhiều máy khách đến một máy chủ duy nhất, gửi các phản hồi không theo thứ tự.

Tôi đã xem xét mẫu Yêu cầu phản hồi nhưng API nêu rõ rằng việc sử dụng Socket đó với nhiều Chủ đề là một ý tưởng tồi. Có lẽ tôi đã bỏ lỡ một cái gì đó hoặc ZeroMQ là thông minh hơn tôi biết. Nếu bạn cần bất kỳ thông tin thêm chỉ cần gửi bình luận và tôi sẽ làm hết sức mình để cung cấp thông tin.

Tôi cũng đã có một cái nhìn tại các ví dụ được cung cấp: Code Examples

Dưới đây là mô tả Socket: ZMQ-Socket

Trả lời

3

Sau ngày tìm kiếm, một người thân thiện trong IRC trong kênh zeromq đã trợ giúp tôi.

Liên kết được cập nhật trong trường hợp ai đó vẫn đang tìm kiếm điều đó. Nên kiên trì! http://zguide.zeromq.org/

Ví dụ này thực sự hoạt động tốt, dễ dàng điều chỉnh, tôi đã sử dụng các chủ đề tăng cường với một threadpool.

+0

Thật không may, trang đó không tồn tại. Chăm sóc để đăng nó ở đây vì vậy đây là một câu trả lời? –

+0

Xin chào d -_- b ở đây là một tùy chọn khác cho nó bằng cách sử dụng http://web.archive.org/web/20120704201150/http://www.zeromq.org/blog:multithreaded-server –

+0

Đọc tốt. Cảm ơn Oliver. –

2

Như tôi hiểu bạn cần một máy chủ mà muốn thực hiện chủ đề mới cho mỗi kết nối đến và mỗi thread trả lời chính xác một kết nối, nếu đây là mã mẫu thực hiện chính xác điều này: http://www.kieser.net/linux/java_server.html

+0

Cảm ơn Shahryar cho nỗ lực của bạn, yêu cầu của tôi ở đây thực sự là với "zeroMq" lý do cho điều đó là khả năng mở rộng, tôi muốn có thể mở rộng ứng dụng sau này để có công nhân trên các máy khác nhau thực hiện tác vụ, với zeromq tôi có thể "theo mô hình" mở rộng mô hình của tôi với thư viện có một mô hình khác và do đó có khả năng mở rộng cao hơn. –

2

Thông thường, khi bạn cố gắng điều chỉnh thiết kế hiện có thành 0MQ, bạn sẽ gặp rắc rối. Ở đây, thiết kế hiện có truyền các socket (thông thường, HTTP) cho các tiến trình hoặc luồng con, và sau đó cho phép chúng trả lời. Nó không phải là một thiết kế rất thanh lịch. Nó hoạt động bởi vì mỗi kết nối mới tồn tại như một ổ cắm, và bởi vì khi một câu trả lời được gửi, socket sẽ bị hủy. Cả hai ứng dụng này đều không áp dụng cho các ứng dụng 0MQ.

Thiết kế 0MQ sử dụng lối vào ROUTER socket để lấy các yêu cầu từ khách hàng. Sau đó, nó chuyển các yêu cầu này tới các luồng công nhân trên các ổ cắm inproc: //, sử dụng một DEALER phụ trợ để xử lý các yêu cầu. Các luồng công nhân sử dụng một ổ cắm REP để nhận các yêu cầu và gửi trả lời của họ trở lại. Các chủ đề chính sau đó thăm dò ý kiến ​​trên cả hai lối vào và ổ cắm phụ trợ, chỉ cần định tuyến thông điệp giữa hai.

Đó là những gì mà bài đăng trên blog cũ giải thích (bằng cách sử dụng tên di sản XREP/XREQ), và nó giải thích chi tiết hơn với các ví dụ trong nhiều ngôn ngữ ở đây: http://zguide.zeromq.org/page:all#Multithreading-with-MQ

Các vấn đề liên quan