Workerman は、クライアントが wss プロトコルを使用して通信に接続できるように (WeChat アプレットでサーバーに接続するなど)、wss サービスをどのように作成しますか。
回答:
wss プロトコルは、実際には WebSocket SSL であり、https (http SSL) と同様に、WebSocket プロトコルに SSL 層を追加します。
したがって、wss プロトコルをサポートするには、WebSocket プロトコルに基づいて SSL を有効にするだけで済みます。 (推奨学習: workerman チュートリアル )
Workerman で直接 SSL を開く
##準備:
1. Workerman のバージョンは 3.3.7 以上です#2. PHP には openssl 拡張機能がインストールされています
3. 証明書 (pem/crt ファイルおよびキー ファイル) が適用されています任意のディレクトリ
コード:<?php
require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;
// 证书最好是申请的证书
$context = array(
// 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 请使用绝对路径
'local_cert' => '磁盘路径/server.pem', // 也可以是crt文件
'local_pk' => '磁盘路径/server.key',
'verify_peer' => false,
// 'allow_self_signed' => true, //如果是自签名证书需要开启此选项
)
);
// 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用)
$worker = new Worker('websocket://0.0.0.0:443', $context);
// 设置transport开启ssl,websocket+ssl即wss
$worker->transport = 'ssl';
$worker->onMessage = function($con, $msg) {
$con->send('ok');
};
Worker::runAll();
Chrome ブラウザを開き、F12 を押してデバッグ コンソールを開き、[コンソール] 列に入力します (または、次のコードを HTML ページに入力して実行します) js)
// 证书是会检查域名的,请使用域名连接 ws = new WebSocket("wss://域名"); ws.onopen = function() { alert("连接成功"); ws.send('tom'); alert("给服务端发送一个字符串:tom"); }; ws.onmessage = function(e) { alert("收到服务端的消息:" + e.data); };
1. 起動できない場合は、通常、ポート 443 が占有されています。別のポートに変更してください。クライアントが接続していることに注意してください。他のポートに変更した後、ポート番号を持ってくる必要があります。クライアントが接続するとき、アドレスは wss://domain.com:xxx のようになります (xxx はポート番号です)。ポート 443 を使用する必要がある場合は、方法 2 プロキシを使用して wss を実装してください。
2. wss ポートには wss プロトコル経由でのみアクセスでき、ws は wss ポートにアクセスできません。
3. 通常、証明書はドメイン名にバインドされているため、テストする場合、クライアントは接続に IP を使用せず、ドメイン名を使用して接続してください。
4. アクセスできない場合は、サーバーのファイアウォールを確認してください。
5.WeChat アプレットには tls1.2 が必要であり、PHP5.6 より前のバージョンは tls1.2 をサポートしていないため、この方法には PHP バージョン 5.6 以上が必要です。
以上がWorkerman で WSS を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。