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
posted @ 2023-03-11 00:29  天宁哦  阅读(82)  评论(0)    收藏  举报