WEB消息推送框架
说明
web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接通讯,如果浏览器不支持WebSocket则自动转用comet推送。 通过后台推送消息,消息可以即时推送到客户端,非轮询,实时性非常好,性能很高。
文档
https://www.workerman.net/web-sender
Linux系统
启动服务
php start.php start -d
停止服务
php start.php stop
服务状态
php start.php status
windows系统
双击start_for_win.bat
如果通信不成功检查防火墙
/sbin/iptables -I INPUT -p tcp --dport 2120 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2121 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2123 -j ACCEPT
禁用函数检查
使用这个脚本检查是否有禁用函数。命令行运行curl -Ss https://www.workerman.net/check | php
如果有提示Function 函数名 may be disabled. Please check disable_functions in php.ini
说明workerman依赖的函数被禁用,需要在php.ini中解除禁用才能正常使用workerman。
解除禁用参考如下两种方法任选其一即可。
方法一:脚本解除
执行脚本 curl -Ss https://www.workerman.net/fix | php
以解除禁用
方法二:手动解除
- 1、运行
php --ini
找到php cli所使用的php.ini文件位置 - 2、打开php.ini,找到
disable_functions
一项解除对应函数的禁用
依赖的函数,使用workerman需要解除以下函数的禁用
stream_socket_server
stream_socket_client
pcntl_signal_dispatch
pcntl_signal
pcntl_alarm
pcntl_fork
posix_getuid
posix_getpwuid
posix_kill
posix_setsid
posix_getpid
posix_getpwnam
posix_getgrnam
posix_getgid
posix_setgid
posix_initgroups
posix_setuid
posix_isatty
遇到困难(linux系统下)
启动以后无法直接停止服务
原因
之前启动的端口如2120 2121 2123 没有关闭,所以导致停止服务以后,再启动会报错
解决办法:
使用sudo lsof -i :2120
查找占用端口的进程PID,然后使用sudo kill <pid>
关闭进程来解决
配置https遇到问题
官方提供的解决方案
官方提供了两种方案:workerman原生支持、nginx代理SSL
我使用的是第二种
前提条件及准备工作:
1、已经安装nginx,版本不低于1.3
2、假设phpsocket.io监听的是2120端口
3、已经申请了证书(pem/crt文件及key文件)放在了/etc/nginx/conf.d/ssl下
4、打算利用nginx开启443端口对外提供ssl代理服务(端口可以根据需要修改)
nginx配置类似如下:
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/server.pem;
ssl_certificate_key /etc/ssl/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#主要是这里加进去就可以了,2120就是我想要https代理的端口
location /socket.io
{
proxy_pass http://127.0.0.1:2120;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
# location / {} 站点的其它配置...
}
注意,我就是这没注意,导致耽误了很久
- 1、证书是要验证域名的,所以客户端链接时要指定域名才能顺利的建立链接。
- 2、客户端连接时不能再用http方式,要改成https类似下面这样。
<script>
// nginx配置过以后,这里要改成https,后面的端口号要去掉不要带上了
var socket = io('https://baidu.com');
//.....
</scrip