最近准备在做消息推送,由于之前一直没有使用过socket ,对这些也比较陌生,下面是使用web-msg-sender 遇到的一些问题总结!
web-msg-sender 是基于 PHPSocket.io 开发的,而 PHPSocket.io 是基于 workerman 开发的。
官网地址:http://www.workerman.net/web-sender
github地址: https://github.com/walkor/web-msg-sender/
1、主要的业务逻辑是:
1) 开启一个端口监听 socket,供客户端链接和消息的转发
2) 开启一个Worker,用于内部请求
3) 需要发送消息,通过PHP请求 Worker
4) 客户端通过 socket.io.js 连接 socket
2、安装 web-msg-sender
安装需要下面几步:
git clone https://github.com/walkor/web-msg-sender
composer install
安装完之后会生成一个 web-msg-sender 文件夹,然后进入文件夹,安装 phpsocket.io
composer require workerman/phpsocket.io
安装完之后即可使用。
3、文件结构说明
```![这里写图片描述](http://static.ptbird.cn/usr/uploads/2017/06/3890610053.jpg)
其实在window下使用最方便,但是我们的应用场景就是服务器里面,下面就说下遇到的一些坑
ssl 之前没看官方手册
如果你的域名是https 那么一定要加上这行代码
// PHPSocketIO服务
$context1 = array(
'ssl' => array(
'local_cert' => '/usr/local/nginx/conf/vhost/https_wechat/wechat.8023hp.cn.crt',
'local_pk' => '/usr/local/nginx/conf/vhost/https_wechat/wechat.8023hp.cn.key',
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
)
);//这里填写主要支持https http可以不写 前端直接 访问端口即可 如果使用了https 那边必须前端的写法必须是 var socket = io('https://wechat.8023hp.cn:2125');
$sender_io = new SocketIO(2125,$context1);
此时重启web-msg-sender 会发现报错
SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request
这说明客户端是用ip来连接的直接,将前端的的连接代码改成
socket = io('https://xxxxxx.com:2125');即可,接下来就可以愉快的玩耍了。