teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

具体的に追記

2018/05/01 01:52

投稿

yamayamak
yamayamak

スコア131

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";