首頁  >  文章  >  php框架  >  workerman怎麼配置wss

workerman怎麼配置wss

(*-*)浩
(*-*)浩原創
2019-12-02 10:11:546172瀏覽

workerman怎麼配置wss

Workerman如何建立一個wss服務,讓客戶端可以使用wss協來連接通訊,例如在微信小程式中連接服務端。

#答案:

wss協定實際上是websocket SSL,就是在websocket協定上加入SSL層,類似https(http SSL)。

所以只需要在websocket協定的基礎上開啟SSL即可支援wss協定。        (建議學習: workerman教學

直接用Workerman開啟SSL

準備工作:

#1、Workerman版本不小於3.3.7

2、PHP安裝了openssl擴充功能

3、已經申請了憑證(pem/crt檔及key檔)放在磁碟任意目錄

程式碼:

<?php
require_once __DIR__ . &#39;/Workerman/Autoloader.php&#39;;
use Workerman\Worker;

// 证书最好是申请的证书
$context = array(
    // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php
    &#39;ssl&#39; => array(
        // 请使用绝对路径
        &#39;local_cert&#39;                 => &#39;磁盘路径/server.pem&#39;, // 也可以是crt文件
        &#39;local_pk&#39;                   => &#39;磁盘路径/server.key&#39;,
        &#39;verify_peer&#39;                => false,
        // &#39;allow_self_signed&#39; => true, //如果是自签名证书需要开启此选项
    )
);
// 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用)
$worker = new Worker(&#39;websocket://0.0.0.0:443&#39;, $context);
// 设置transport开启ssl,websocket+ssl即wss
$worker->transport = &#39;ssl&#39;;
$worker->onMessage = function($con, $msg) {
    $con->send(&#39;ok&#39;);
};

Worker::runAll();

透過以上的程式碼,Workerman就監聽了wss協議,客戶端就可以透過wss協定來連接workerman實現安全即時通訊了。

測試

開啟chrome瀏覽器,按F12開啟偵錯控制台,在Console一欄輸入(或將下面程式碼放入到html頁面用js執行)

// 证书是会检查域名的,请使用域名连接
ws = new WebSocket("wss://域名");
ws.onopen = function() {
    alert("连接成功");
    ws.send(&#39;tom&#39;);
    alert("给服务端发送一个字符串:tom");
};
    ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
    };

注意:

1、如果無法啟動,則一般是443端口被佔用,請改成其它端口,注意改成其它端口後客戶端連接時需帶上連接埠號,客戶端連線時位址類似wss://domain.com:xxx ,xxx為連接埠號碼。如果必須使用443埠請使用方法二代理的方式實作wss。

2、wss連接埠只能透過wss協定訪問,ws無法存取wss連接埠。

3、憑證一般是與網域綁定的,所以測試的時候客戶端請使用網域連接,不要使用ip去連。

4、如果出現無法存取的情況,請檢查伺服器防火牆。

5、此方法要求PHP版本>=5.6,因為微信小程式要求tls1.2,而PHP5.6以下版本不支援tls1.2。

以上是workerman怎麼配置wss的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn