2012-05-16 12 views
8

Nie mogę znaleźć żadnych informacji na temat konfigurowania połączenia wss w PHP. Nie mam problemu z połączeniem, rzuć ws. Używam tej wspaniałej biblioteki, aby to zrobić, przy okazji: https://github.com/albeva/php-websocketJak skonfigurować bezpieczne połączenie WebSocket z PHP?

Ale moja witryna używa protokołu https i potrzebuję połączenia WebSocket Secure, aby uniknąć sytuacji, w której Firefox skarży się na fakt, że połączenie jest niepewne.

Z góry dziękuję za pomoc.


Edit

Oto kod używany przez biblioteki, aby rozpocząć połączenie Gniazdo:

$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if (!is_resource($master)) { 
    $this->throwSocketError(); 
} 

// set options 
if (!socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)) { 
    $this->throwSocketError(); 
} 

// bind 
if (!socket_bind($master, $this->host, $this->port)) { 
    $this->throwSocketError(); 
} 

// listen for connections 
if (!socket_listen($master, SOMAXCONN)) { 
    $this->throwSocketError(); 
} 

wierzę Muszę zmienić ten kod, ale nie mogę znaleźć jak .

Odpowiedz

1

Twoje najlepsze ujęcie w PHP to obecnie wersja Ratchet. Najlepszym sposobem na skonfigurowanie połączenia wss jest umieszczenie serwera websocket za Nginx lub HAProxy, który obsłuży wszystkie pliki SSL. Zostało to wyjaśnione jako here z HAProxy. Zauważ, że możesz zrobić to samo z Nginx, ponieważ teraz obsługuje on również WebSocket.

2

Oto przykład (i link), który został nieznacznie zmodyfikowany i znaleziony z innego wpisu SO. Link to other post

Tutaj znajduje się łącze do definicji funkcji php funkcji stream_context_create. function definition

try 
{ 
    $localCertificateFilespec = $connection['localCertificateFilespec']; 
    $localCertificatePassphrase = $connection['localCertificatePassphrase']; 

    $sslOptions = array( 
     'ssl' => array( 
      'local_cert' => $localCertificateFilespec, 
      'passphrase' => $localCertificatePassphrase, 
      'allow_self_signed' => true, 
      'verify_peer' => false 
     ) 
    ); 
    $sslContext = stream_context_create($sslOptions); 

    $clientArguments = array( 
     'stream_context' => $sslContext, 
     'local_cert' => $localCertificateFilespec, 
     'passphrase' => $localCertificatePassphrase, 
     'trace' => true, 
     'exceptions' => true, 
     'encoding' => 'UTF-8', 
     'soap_version' => SOAP_1_1 
    ); 

    $oClient = new WSSoapClient($connection['wsdlFilespec'], $clientArguments); 
    $oClient->__setUsernameToken($connection['username'], $connection['password']); 

    return $oClient->__soapCall($operation, $request); 
} 

Jednak, na samym dole połączony SO wątku znajdziesz odpowiedź od "Sam". Potrzebuję zrobić to samo w ciągu najbliższych kilku tygodni, więc planuję użyć metody Samsa ... ponieważ jestem bardziej fanem CURL w PHP.

+0

Zaktualizowałem mój post, aby pokazać funkcję uruchamiania (która korzysta z rozszerzenia gniazda PHP) z biblioteki, której używam. Przeczytałem już wskazany przez Ciebie wpis, ale nie udało mi się go obsłużyć przy użyciu tego kodu. –

4

Czy próbowałeś stream_socket_server?

<?php 
$socket = stream_socket_server("ssl://0.0.0.0:".$port, $errno, $errstr); 
if (!$socket) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    while ($conn = stream_socket_accept($socket)) { 
    fwrite($conn, 'some data...\n'); 
    fclose($conn); 
    } 
    fclose($socket); 
} 
?> 
Powiązane problemy