2012-05-16 29 views
8

PHP'de bir wss bağlantısı kurma hakkında hiçbir bilgi bulamıyorum. Bağlanmak için sorunum yok ws. Bu arada bu güzel kütüphaneyi kullanıyorum: https://github.com/albeva/php-websocketWebSocket nasıl kurulur PHP ile güvenli bağlantı?

Ancak web sitem https kullanıyor ve Firefox'un bağlantının güvensiz olduğu konusunda şikayette bulunmak için WebSocket Secure bağlantısına ihtiyacım var.

Yardımlarınız için şimdiden teşekkür ederiz. İşte Düzenleme


soket bağlantısı başlatmak için kütüphaneye tarafından kullanılan kod: Ben bu kodunu değiştirmek gerekir inanıyoruz

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

ama nasıl bulamıyor .

cevap

1

En iyi atış şu anda. Bir wss bağlantısı kurmanın en iyi yolu, websocket sunucunuzu, tüm SSL işlerini sizin için halledecek Nginx veya HAProxy'nin arkasına koymaktır. Bu, HAProxy ile here açıklanmıştır. Aynı zamanda WebSocket'i desteklediğinden Nginx ile de aynı şeyi yapabileceğinizi unutmayın.

2

Biraz değiştirilen ve başka bir SO postasından bulunan bir örnek (ve link). Link to other post

Ve burada stream_context_create php işlev tanımına bir bağlantı var. 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); 
} 

Ancak bağlantılı SO yazının en altında, siz "Sam" dan bir cevap bulacaksınız. Önümüzdeki birkaç hafta içinde aynı şeyi yapmaya ihtiyacım var, bu yüzden Sams yöntemini kullanmayı planlıyorum ... çünkü PHP'de CURL hayranıyım.

+0

Kullanmakta olduğum kitaplığın başlangıç ​​işlevini (php soket uzantısını kullanan) göstermek için gönderimi güncelledim. İşaret ettiğin gönderiyi zaten okumuştum, ancak bu kodla çalışmayı başaramamıştım. –

4

stream_socket_server'u denediniz mi? Ratchet kullanımı PHP üzerinde

<?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); 
} 
?> 
İlgili konular