11

PHPでのwss接続の設定に関する情報が見つかりません。wsを投げて接続しても問題ありません。ちなみに、私はこの非常に優れたライブラリを使用してこれを行っています:https ://github.com/albeva/php-websocket

しかし、私のWebサイトはhttpsを使用しており、Firefoxが接続が安全でないという事実について不平を言うのを避けるために、WebSocketSecure接続が必要です。

よろしくお願いします。


編集

ライブラリがソケット接続を開始するために使用するコードは次のとおりです。

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

このコードを変更する必要があると思いますが、方法がわかりません。

4

3 に答える 3

4

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);
}
?>
于 2012-05-24T09:05:48.493 に答える
2

これは、わずかに変更され、別のSO投稿から見つかった例(およびリンク)です。 他の投稿へのリンク

そして、ここにstream_context_createphp関数定義へのリンクがあります。 関数定義

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

ただし、リンクされたSO投稿の一番下に、「Sam」からの回答があります。今後数週間でこれと同じことを行う必要があるので、Samsメソッドを使用する予定です...私はPHP内のCURLのファンです。

于 2012-05-18T20:07:08.077 に答える
1

PHPでのベストショットは、現在ラチェットを使用することです。wss接続をセットアップする最良の方法は、すべてのSSLを処理するNginxまたはHAProxyの背後にWebSocketサーバーを配置することです。これは、HAProxyを使用してここで説明されています。NginxもWebSocketをサポートするようになったため、Nginxでも同じことができることに注意してください。

于 2013-10-09T14:22:13.867 に答える