当前位置:编程学习 > php >>

workerman 实现的websocket 反向代理 nginx 亲测

php workerman 实现websocket WEB消息推送 非常简单,不过默认都是带端口的,例如前段端口:2120 后端:2626 (注意端口可以在start.php根据需要自行修改)

我们现在为了安全,在nginx里面做个反向代理,省去外网端口访问,方便在线网页程序中调用:

亲测可用

1,后端调用api向任意用户推送
后端 nginx反向代理片段: /wss_admin/ 可以根据自己需要任意修改

        location /wss_admin/
        {
        proxy_pass http://127.0.0.1:2626;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        }

后端 php部分:

<?php
// 指明给谁推送,为空表示向所有在线用户推送
$to_uid = "";
// 推送的url地址,使用自己的真实地址
$push_api_url = "https://www.yizuotu.net/wss_admin/";
$post_data = array(
   "type" => "publish",
   "content" => "这个是推送的测试数据",
   "to" => $to_uid, 
);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:"));
$return = curl_exec ( $ch );
curl_close ( $ch );
var_export($return);

2,前端 nginx反向代理片段: /socket.io 不要该成其他的,改了麻烦多或者不成功

        location /socket.io
        {
        proxy_pass http://127.0.0.1:2120;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        }

前端 js代码,请改成自己的真实域名:

<script src='http://yizuotu.net/socket.io/1.3.7/socket.io.js'></script>
<script>

    var socket = io('https://www.yizuotu.net');
    // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数
    uid = 123;
    // socket连接后以uid登录
    socket.on('connect', function(){
        socket.emit('login', uid);
    });
    // 后端推送来消息时
    socket.on('new_msg', function(msg){
        console.log("收到消息:"+msg);
    });
    // 后端推送来在线数据时
    socket.on('update_online_count', function(online_stat){
        console.log(online_stat);
    });
</script>

这样操作一番,web防火墙和iptables 只需要打开 端口 80 和 443 ,不用额外开放 php workerman 的运行端口,是不是很开心

欢迎访问yizuotu.net测试 一次登录 一次注销 所有页面同时更新状态

图片放大缩小多种特效,返回处理结果

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,