質問編集履歴
1
具体的に追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
Mosquitto-PHP(MQTTクライアント)にて、通信相手に送信(Publish)したら通信相手からのデータを受ける(subscribe/onMessage)プログラムを作ってます。
|
2
2
|
送信した後に相手から受信が10秒間なかったらタイムアウトして切断(disconnect)したいですが、どのように記載すべきでしょうか?
|
3
3
|
|
4
|
+
以下の動作は
|
5
|
+
(1)connectで接続
|
6
|
+
(2)subscribeでTopicを受信状態(onConnect内で接続されたらsubscribeしています。)
|
7
|
+
(3)publishでメッセージ送信(onSubscribe内でsubscribe完了したら送信(publish)しています。)
|
8
|
+
(4)subscribeしているTopicのメッセージを受信(onMessage内)
|
9
|
+
という感じで進めています。
|
10
|
+
|
11
|
+
(3)のpublishで通信相手(subscribe)に通信が送信しています。
|
12
|
+
(4)で通信相手がpublishしてくれたものをsubscribeで受ける処理を想定しています。
|
13
|
+
ただ、通信相手が確実に送信(Publish)してくれるかはわかりませんので10秒程度
|
14
|
+
onMessage(subscribeしているTopic)で待っているけど何も届かない場合にタイムアウトして切断(disconnect)したいと考えています。
|
15
|
+
|
4
16
|
ご教授をお願いします。
|
5
17
|
|
6
18
|
```php
|
@@ -13,7 +25,7 @@
|
|
13
25
|
$c->onConnect(function($r) use ($c) {
|
14
26
|
echo "I got code {$r}\n";
|
15
27
|
if ( $r == 0 ) {
|
16
|
-
$c->subscribe('recv1', 0);
|
28
|
+
$c->subscribe('recv1', 0); // (2)
|
17
29
|
} else {
|
18
30
|
echo "connectErr {$r}\n";
|
19
31
|
$c->disconnect();
|
@@ -23,10 +35,10 @@
|
|
23
35
|
$c->onSubscribe(function() use ($c) {
|
24
36
|
echo "Subscribed to a topic\n";
|
25
37
|
$jobType = 1;
|
26
|
-
$mid = $c->publish('send1', "Hello job1", 0, false);
|
38
|
+
$mid = $c->publish('send1', "Hello job1", 0, false); // (3)
|
27
39
|
echo "Sent1 message ID: {$mid}\n";
|
28
40
|
});
|
29
|
-
$c->onMessage(function($message) use ($c) {
|
41
|
+
$c->onMessage(function($message) use ($c) { // (4)
|
30
42
|
printf("Got a message ID %d on topic %s with payload:\n%s\n\n", $message->mid, $message->topic, $message->payload);
|
31
43
|
// jobType1
|
32
44
|
if ( $jobType == 1 && $message->payload=='OK' ) {
|
@@ -45,7 +57,7 @@
|
|
45
57
|
}
|
46
58
|
});
|
47
59
|
|
48
|
-
$c->connect("a.mosq.net", 1883, 60); // 60:KeepAlive
|
60
|
+
$c->connect("a.mosq.net", 1883, 60); // (1) 60:KeepAlive
|
49
61
|
$c->loopForever();
|
50
62
|
|
51
63
|
echo "Finished\n";
|