2

PHP で永続的なソケット接続を設定する必要がありますが、これを実現する方法がわかりません。現在、SMS メッセージを送信するときは、a) ソケット接続を開きます b) (SMS/SMPP 経由で) メッセージを送信し、c) ソケット接続を閉じます

ただし、常に接続を開いたり閉じたりする必要はありません。むしろ、私は要求します

- 2 persistent connections that maintains connectivity to an SMSC (SMS centre) and reconnects when a timeout occurs. 
- One persistent connection for reading SMS and one for sending SMS.
- Automatic restart/recovery (i.e. when memory issues arise)
- Automatic looping to act as listener for incoming events such as receiving incoming delivery receipts and sms messages, as well as 'ping' (enquire link) to keep SMPP connection alive.

更新:誰かが次を使用して上記を達成したかどうか疑問に思っていました: https://github.com/shaneharter/PHP-Daemon

4

1 に答える 1

1

関数pfsockopenには、探している機能があるようです。この質問を確認してください - PHP pfsockopen in a session

===

実装に関する個人的な観察。PHP コードは着信要求によってトリガーされ、それ以外の場合は SMPP クライアントが非アクティブになると想定しています。これは、いくつかの理由で SMPP にはあまり適していない可能性があります。

  • SMPP クライアントは、SMSC から受信したすべてのインバウンド PDU に対して応答 PDU を返送する必要があります。
  • これらの PDU の 1 つは、接続を維持するために使用される enquire_link です。SMPP クライアントが enquire_link_resp PDU を返さない場合、接続は切断されます。あなたはこれらの多くを経験するかもしれません。pfsockopenを使用しても、この問題は解決しません。
  • 配信確認を提供する場合、SMPP クライアントは SMSC に応答する必要があります。
  • SMPP クライアントが SMSC 用に受信した PDU に対する応答 PDU の送信に失敗した場合 (パイプからバイトを読み取った場合)、SMSC はそれらの PDU の一部を再送信する場合があります。これにより、SMPP クライアント マシンで不要なヒットが発生するリスクが生じます。
于 2013-03-05T19:44:59.880 に答える