使用 nginx 和 sse 时候的并发问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyzzy1943
V2EX    NGINX

使用 nginx 和 sse 时候的并发问题

  •  
  •   fyzzy1943 2016-07-07 15:34:45 +08:00 3840 次点击
    这是一个创建于 3385 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我按照 sse 的教程写了一段代码,大概是下面这个样子的。

     var es = new EventSource('/flush'); es.addEventListener('message', function(e) { var d = JSON.parse(e.data); document.getElementById(d.symbol).innerHTML = '<br/>'+d.bid; }, false); 

    自己运行是没什么问题的,浏览器能一直接收到服务器发送过来的数据,然后出现了一个问题,就是同时只有一个人能访问,第二个人访问的时候就是一直转圈加载,如果第一个人把页面关了,第二个人就加载出来了。一开始我以为是并发数的问题,然后上网找了找, nginx 里 worker_connections 是 1024;,都是默认的设置,然后我又改了 worker_processes 和 worker_cpu_affinity ,也没有效果,还是同时只能有一个人访问。

    我想问一下,这个可能是什么原因呢?谢谢了

    8 条回复    2016-07-08 15:20:58 +08:00
    sweb
        1
    sweb  
       2016-07-08 09:38:42 +08:00
    后端是什么? nodejs ?目测后端服务单线阻塞了。
    fyzzy1943
        2
    fyzzy1943  
    OP
       2016-07-08 10:17:03 +08:00
    @sweb 后端是 php 呀
    sweb
        3
    sweb  
       2016-07-08 13:07:11 +08:00
    看看 php 进程数,贴 nginx 配置和 php 代码
    fyzzy1943
        4
    fyzzy1943  
    OP
       2016-07-08 13:53:54 +08:00
    ```
    server {
    listen 80;
    server_name 127.0.0.3;
    root D:/www/www/SSE-learn/public;


    location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }
    ```

    nginx 的配置是这样的,别的都是默认的,版本是 1.11.1

    ```
    set_time_limit(0);

    header('Content-Type: text/event-stream');
    header('X-Accel-Buffering: no');
    while(true) {
    $sleepSecs = mt_rand(250, 500) / 1000.0;
    usleep($sleepSecs * 1000000);

    $bid = mt_rand(1000, 2000) / 1000.0;
    $t = microtime(true);
    $d = array(
    'timestamp' => gmdate('Y-m-d H:i:s', $t) . sprintf('. %03d', ($t*1000)%1000),
    'symbol' => 'funny',
    'bid' => $bid,
    );

    echo 'data:' . json_encode($d) . PHP_EOL . PHP_EOL;
    @ob_flush(); @flush();
    ```

    PHP 代码大概是这样子的,然后想问下 windows 下运行 php-cgi ,是不是就是单进程模式运行的。
    sweb
        5
    sweb  
       2016-07-08 14:01:10 +08:00
    nginx 到 php-cgi 都没有什么问题,应该是你的 php-cgi 只起了一个进程导致的, php-cgi 数量是你可以设置的,一般我们都是在 linux 跑 php-fpm 的组合来玩的。
    fyzzy1943
        6
    fyzzy1943  
    OP
       2016-07-08 14:33:46 +08:00
    @sweb 我今天在找资料的时候发现 windows 似乎没有 fpm ,运行的话就是直接运行一个 php-cgi ,还没找到那个数量的设置,难道要多运行几个嘛?
    fyzzy1943
        7
    fyzzy1943  
    OP
       2016-07-08 14:34:59 +08:00
    D:\www\php708nts\php-cgi.exe -b 127.0.0.1:9000-c D:\www\php708nts\php.ini 就像这样的,直接是打开的 php-cgi
    sweb
        8
    sweb  
       2016-07-08 15:20:58 +08:00
    你需要的是一个 cgi 管理程序,官方集成的是 fpm ,所以你在 win 下不跑 fpm 的话,就得找替代品,要不你就用 apache 去跑, apache 有 php 的 mod ,不然你还真的要手动开启几个 php-cgi ,在 windows 下要不集成 IIS ,要不跑个集成包吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3303 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:48 PVG 19:48 LAX 04:48 JFK 07:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86