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);
}
// ..
Đã lưu ngày của tôi! Cảm ơn! – Franquis