2013-09-06 4 views
0

토큰으로 인증하는 서버에 연결하는 데 필요한 PHP 응용 프로그램이 있는데이 토큰은 연결이 끊어 질 때까지 유효합니다.서로 후 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(); 
} 

여러 번

+0

당신은 여기 객체/클래스를 사용하고 ... 이런 식으로 뭔가를 시도? – Maximus2012

+0

Stdclass, yes .. – Marco

+0

'$ this-> socket'을'sendeverything' 이외의 용도로 사용하셨습니까? – bansi

답변

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

?> 
+0

이 도움이되어 나를 일하게 만들었습니다! – Marco

2

가장 쉬운 해결책은 is_connected 기능을 가지고하는 것입니다 :에서

function connect() { 
    if(is_already_connected()) { 
     return; 
    } 
    // ... your connect logic 
} 

is_already_connected() 당신이 열려있는 연결이 있는지 확인하기 위해 몇 가지 지능적인 코드를 작성해야합니다.

또한 단일 연결의 종류를 만들 수 있습니다 (이 제안은 아마 싱글의 사용에 대한 많은 토론을 인스턴스화 것이지만))

+0

연결을 끊을 수 없어 손실이 발생합니다. 액션 --- 죄송합니다. 솔루션을 잘못 읽었습니다. 시도해 보겠습니다. 연결이 끊어 질 필요가없는 것 같습니다. – Marco

+0

연결이 이미 열려 있는지 확인해야합니다. 다른 것을 열어야한다). 아니면 그냥 귀하의 질문을 이해하지 못합니다;) - 오, 내가 입력하는 동안 오, 잠깐, 당신은 당신의 의견을 개정 : P는 – giorgio

+0

하하, 잘 테스트 후 그것은 연결에 대한 것 같지 않아요 ...에 대한 데이터 처리 : ... 여전히 함수의 프로세스를 큐에 넣는 방법을 찾아야한다. – Marco

0

으로는이에 대한 sem_aquire을 사용할 수 있습니다 in this question 언급했다. 다음과 같음 :

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에서는 작동하지 않습니다. 창문에 있다면 flock을 다시 사용할 수 있습니다 - 위의 질문에서 언급 한 바와 같이.

관련 문제