Workerman은 WeChat 애플릿에서 서버에 연결하는 등 클라이언트가 wss 프로토콜을 사용하여 통신에 연결할 수 있도록 wss 서비스를 어떻게 생성합니까?
답변:
wss 프로토콜은 실제로 websocket+SSL입니다. 이는 https(http+SSL)와 유사하게 websocket 프로토콜에 SSL 레이어를 추가하는 것을 의미합니다.
따라서 wss 프로토콜을 지원하려면 websocket 프로토콜 기반 SSL을 활성화하기만 하면 됩니다. (권장) 학습 종료: workerman 튜토리얼 )
Workerman으로 직접 SSL 열기
준비 작업:
1. Workerman 버전은 3.3.72 이상입니다.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!