如何在表单提交时每次使用一个对象?

时间:2013-05-23 07:00:06

标签: php sockets object yii scope

我正在使用PHP和Yii中的套接字。我有一个包含以下字段的表单:

ip
port
message

调用Action包含以下套接字编程代码,并在提交表单时成功发送数据包。

$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 );

问题在于,每当我提交具有不同数据包/消息的表单时,都会创建一个新的连接/套接字,然后发送数据包/消息。我想只创建一次socket,然后使用 form 和相同的套接字发送消息/数据包。有可能吗?

1 个答案:

答案 0 :(得分:1)

不可能直接 - 至少让我理解这个问题 - 因为每次提交表单时,一个单独的PHP进程接受它并发送消息。由于它是一个单独的进程,它需要自己的套接字。

您可以做的是将PHP代码分解为部分:

  1. 前端,将接受表单提交和
  2. 后端,将发送套接字消息
  3. 通过这种安排,您可以保持后端运行(并保持其唯一的连接打开),同时每次提交表单时重新生成前端。当然,这意味着您还需要安排前端与后端进行通信(后端甚至不需要用PHP编写)。