之前写了一篇文章,使用 web-msg-sender 进行消息推送
文章地址: http://www.ptbird.cn/web-msg-sender-send-content.html

客户端使用 socket.io.js 连接 socket 的时候, 如果是 https 站必须连接 https 的 socket ,此时需要进行处理。

好处是 Workerman 原生支持 https

一、需求

HTTPS 站点使用 web-msg-sender 进行消息的推送。

适用于 Workerman 框架的所有应用。

workderman ssl 文档地址:

二、修改代码

由于 Workerman 原生支持 HTTPS ,只需要证书进行验证即可,以 web-msg-sender 举例:

需要修改的是 socket_io.php ,修改的地方包括 socket 和 Worker 的http

1. 修改 socketIO

// 传入ssl选项,包含证书的路径
$context = array(
    'ssl' => array(
        'local_cert'  => '/usr/local/nginx/conf/ssl/xxxxx.com.crt', // pem 文件一样的
        'local_pk'    => '/usr/local/nginx/conf/ssl/xxxxx.com.key',
        'verify_peer' => false,
    )
);
// PHPSocketIO服务 加上 $context 项
$sender_io = new SocketIO(2120,$context);

2. 修改 Worker

需要注意的是,开启的协议还是 http,只不过我们加了一层套接字 SSL。

  • 我一直的观点是 http 是协议,SSL也是协议,但是https不是协议。
  • Worker 中 http 的意思就是进行http请求
$context = array(
        'ssl' => array(
            'local_cert'  => '/usr/local/nginx/conf/ssl/xxxxx.com.crt', // pem 文件一样的
            'local_pk'    => '/usr/local/nginx/conf/ssl/xxxxx.com.key',
            'verify_peer' => false,
        )
    );
    // 监听一个http端口
    $inner_http_worker = new Worker('http://0.0.0.0:2121',$context);

3. 使用

使用的时候,用的那个域名的crt和key文件就监听和发送哪个域名接口,请求URL和websocket都需要(不过为了省事儿, Worker的那个套接字其实加不加无所谓,主要是socket的套接字。但是为仅仅使用Workerman的Worker加SSL,这样操作就OK)

QQ截图20170612194049.jpg