2012-06-08 38 views
6

Tôi đã sử dụng ZeroMQ khá thành công với PHP và đã viết một máy chủ công việc. Tôi có một kịch bản quản trị kiểm tra tình trạng của máy chủ và thực hiện các công cụ như ping nó với thời gian chờ.Làm thế nào để ngắt kết nối ổ cắm ZeroMQ sau khi hết thời gian chờ?

Mọi thứ hoạt động tốt khi máy chủ bật lên, nhưng khi máy chủ hoạt động (và ZMQPoll lần như mong đợi), tập lệnh của tôi thực hiện được - BUT tập lệnh không bao giờ kết thúc.

Tôi đã thử xóa và xóa tất cả các biến socket, v.v. nhưng thậm chí gọi exit() tập lệnh PHP bị treo.

Có vẻ như không phải là phương pháp ổ cắm disconnect(), vậy làm thế nào để tôi nói với PHP rằng ổ cắm đã chết và tôi không muốn nó bị treo?

Đây là một đoạn mã dưới đây từ kịch bản quản trị của tôi -

 // ... 
     // waiting for dead server on zmqsock to respond after sending a message 
     // 
     $poll = new ZMQPoll; 
     $poll->add($this->zmqsock, ZMQ::POLL_IN); 
     $readable = $writeable = array(); 
     $poll->poll($readable, $writeable, $timeout * 1000); 
     if($errors = $poll->getLastErrors()) { 
      foreach ($errors as $err) { 
       throw new Exception($err); 
      } 
     } 
     if(! $readable){ 
      // clean up everything, raise errors, etc.. 
      $poll->clear(); 
      unset($poll, $this->zmqsock, $this->zmqcontext); 
      // Script hangs here 
      exit(0); 
     } 
     // .. 
+0

Đã lưu ngày của tôi! Cảm ơn! – Franquis

Trả lời

7

ZeroMQ sẽ cố gắng và cung cấp cấp phát các thông điệp khi nó tắt - bạn có thể kiểm soát đó bằng cách thiết lập các tùy chọn socket ZMQ :: SOCKOPT_LINGER (mà bạn phải làm trước khi bạn kết nối), điều này sẽ cho phép bạn chấm dứt nhanh chóng.

Hãy xem bit ZMQ_LINGER trên http://api.zeromq.org/2-1:zmq-setsockopt

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