1

PHP と Yii でソケットを使用しています。次のフィールドを持つフォームがあります。

ip
port
message

フォームを送信すると、次のソケット プログラミング コードを含むアクションが呼び出され、パケットが正常に送信されます。

$socket = socket_create( AF_INET, SOCK_STREAM, getprotobyname('tcp') );
socket_connect( $socket, $address, $port );      
$status = socket_sendto( $socket, $message, $len, 0, $address, $port );

if( $status !== FALSE ) {                        
   $next = '';                        
   while( $next = socket_read( $socket, 1000 ) ) {                     
       $response .= $next;
       if( strpos( $response, "\n" ) !== false )
           break;
   }                 
} else {
   $response = "Failed";
}

socket_close( $socket );

問題は、異なるpacket/messageでフォームを送信するたびに、新しい接続/ソケットが作成されてから、パケット/メッセージが送信されることです。ソケットを一度だけ作成し、同じソケットのフォームを使用してメッセージ/パケットを送信したい。出来ますか?

4

1 に答える 1

1

フォームが送信されるたびに個別の PHP プロセスがそれを受け入れてメッセージを送信するため、少なくとも質問を理解している限り、直接は不可能です。これは別のプロセスであるため、独自のソケットが必要です。

あなたができることは、PHPコードを部分に分割することです:

  1. フォームの送信を受け入れるフロントエンドと
  2. ソケット メッセージを送信するバックエンド

この配置により、フォームが送信されるたびにフロントエンドが新たに生成されている間、バックエンドを実行し続けることができます (そしてその唯一の接続を開いたままにします)。もちろん、これはフロントエンドがバックエンドと通信するように調整する必要があることも意味します (バックエンドは PHP で書かれている必要さえありません)。

于 2013-05-23T07:42:46.720 に答える