0

トークンで認証するサーバーに接続する必要がある php アプリケーションがあります。このトークンは、接続が失われるまで有効なままです。

最初の接続がまだ開いている間に別の接続が確立されると、トークンが現在接続されているものと異なるため、アプリケーションがクラッシュします...

public function connect()
{
    $Socket = fsockopen("192.168.1.1", 1234);
    if ($Socket !== false) {
        stream_set_timeout($Socket, static::TIMEOUT_SEC, static::TIMEOUT_USEC);
        $this->socket = $Socket;
        $this->sendeverything;
    }
}

次のような関数を実行するにはどうすればよいですか。

 function gogogo() {
      connect();
 }

同時に実行せずに複数回

私の悪い英語でごめんなさい

4

3 に答える 3

1

このようなものを試してみてください...

<?php

class Connection {
    public $Socket = null;

    public function connect(){
        // Checking if Socket already has a pointer :P
        if((bool)$this->Socket){
            return true;
        }

        $this->Socket = fsockopen("192.168.1.1", 1234);
        if ($this->Socket !== false) {
            stream_set_timeout($this->Socket, static::TIMEOUT_SEC, static::TIMEOUT_USEC);
            $this->sendeverything();
        }
    }
}

$myconnect = new Connection();
$myconnect->connect();
$myconnect->connect();

?>
于 2013-09-06T16:05:21.973 に答える
0

この質問で述べたように、これに使用できますsem_aquire。何かのようなもの:

function connect(){
    $key = "192.168.1.1:1234" ;
    try{
        $sem = sem_get( $SEMKey);
        sem_acquire($sem);
        //Do connecty stuff here
        sem_release($sem);
    }catch(Exception $ex){
        //Exception handling
    }finally{
        //Finally only available in PHP 5.5 place this in catch and try if < 5.5
        sem_release($sem);
    }
}

これは完全にテストされておらず、Windows では動作しないことに注意してください。Windows を使用している場合は、上記の質問で述べたように、再びflockを使用できます。

于 2013-09-06T16:03:34.187 に答える