`
lht
  • 浏览: 199220 次
  • 来自: 深圳
社区版块
存档分类
最新评论

nginx与php实现long polling

阅读更多

Nginx的HTTP push模块可以实现长Polling。利用PHP管理频道的订阅和发布消息,这样就可以非常方便的实现聊天、即时信息等传递到客户端,并且不会增加PHP的进程数量。

1. 下载nginx http push module源代码,降压到/var/tmp中

2. 下来nginx的src.rpm包,安装后修改spec文件中的configure指令,增加:

--add-module=/var/tmp/nginx_http_push_module

3. rpmbuild nginx包,并安装

4. 配置nginx:

        location /polling/ {

            proxy_pass http://127.0.0.1:8080;

        }

        location /polling/sub/ {
            internal;
            set $push_channel_id $arg_id;
            push_subscriber;
            push_subscriber_concurrency broadcast;
            push_channel_group broadcast;
        }

        location /polling/pub/ {

            allow 127.0.0.1;

            deny all;
            set $push_channel_id $arg_id;
            push_publisher;
            push_min_message_buffer_length 5;
            push_max_message_buffer_length 20;
            push_message_timeout 2m;
            push_channel_group broadcast;
        }
5. PHP部分

    在PHP中处理/polling/请求的GET和POST方法。

5.1 处理GET的时候判断客户的Cookie,如果已经有权限,则:

header("X-Accel-Redirect: /polling/sub/?".$_SERVER['QUERY_STRING']);

否则就去鉴权用户。

5.2 处理POST的时候判断客户是否有POST权限,如果有则发起HTTP POST调用,将数据完全转发给:

http://127.0.0.1/polling/pub/?$_SERVER['QUERY_STRING']

 

这样就综合利用了nginx的长POLLING功能和PHP的脚本管理优势。

 

分享到:
评论

相关推荐

    PHP实例开发源码——喧喧(开源免费的企业即时通讯IM软件) 源码包.zip

    PHP可能通过WebSocket或者Long Polling等技术实现客户端与服务器的实时交互。WebSocket提供双向通信,可以实现低延迟的消息传递;而Long Polling则是一种变通的解决方案,适用于不支持WebSocket的环境。 3. **消息...

    基于PHP的财经直播聊天系统php版v2.0源码.zip

    4. 实时通信技术:实现聊天功能,可能使用了WebSocket或者Long Polling等实时通信技术。WebSocket允许双向通信,提供低延迟、高效的数据传输,适合实时聊天场景。而Long Polling是HTTP长连接的一种实现方式,适合对...

    h5即时通讯源码,PHP开发的H5即时通讯聊天系统源码 带群聊 可封装APP

    这个系统可能采用了WebSocket或Long Polling等技术来实现。WebSocket提供双向通信,允许服务器主动推送消息,而Long Polling则是客户端持续请求服务器,直到有新消息时才返回,确保消息的即时性。 4. **群聊功能**...

    flash+php文字聊天室

    这通常通过轮询(Polling)、长轮询(Long Polling)或者WebSocket等技术实现,其中WebSocket能提供双向通信,实现真正的实时性。 为了实现聊天室的功能,以下是一些关键的技术点: 1. **数据传输协议**:Flash与...

    PHP防Sina微薄无刷新服务器推送(comet)原理

    1. **长轮询(Long Polling)**:客户端向服务器发送请求,服务器接收请求后并不立即响应,而是等待有新数据可用时才返回。如果在预设的超时时间内没有新数据,服务器会返回一个空响应,客户端收到响应后再次发起请求...

    php长连接开发.pdf

    传统的PHP聊天室通常采用轮询(polling)或长轮询(long polling)技术。轮询方式中,客户端定时向服务器发送请求,询问是否有新消息,这种方式虽简单但效率较低,当用户数量增加时,服务器压力会显著增大。长轮询则...

    long-pooling-php

    标题中的"long-pooling-php"指的是在PHP环境中实现的长轮询(Long-Polling)技术。长轮询是HTTP持久连接的一种实现方式,常用于实现实时通信,特别是WebSocket出现之前,它是一种常见的替代方案。 长轮询的工作原理...

    在Laravel中构建一个聊天应用程序_JavaScript_PHP_下载.zip

    8. **Real-time Communication**:为了让聊天实时,可以利用WebSockets或者基于轮询(如Long Polling)的技术。Laravel的`Broadcasting`功能结合Pusher或Redis等服务可以实现WebSocket功能,实时推送消息到客户端。 ...

    laravel5_simple_long_polling_chat:Laravel 5简单的长轮询聊天

    我们必须使用Apache / nginx / cowboy或其他生产Web服务器。 将文件夹server设置为Web服务文档的根目录和目录。 正如我们在文件resources/assets/angular/home/home.config.js我正在使用chatty.dev作为远程端点,...

    仿乐享微信

    这可能需要使用WebSocket技术实现双向实时通信,或者使用PHP的轮询(polling)或长轮询(long-polling)技术。WebSocket能提供低延迟的双向通信,但需要服务器支持。 6. **前端技术**:为了构建用户界面,开发者...

    Facebook的服务器架构(组图).doc

    Web服务器处理初始的聊天请求,如获取消息历史和在线用户列表,而实际的聊天消息接收则通过Erlang编写的Channel服务器实现,利用long-polling技术。发送的消息通过Web层传递给Channel服务器,聊天记录由C++写的...

    查看同步的服务器页面

    - **Long Polling**:客户端发起一个请求,服务器保持连接直到有新数据可用,然后立即响应,客户端再发起新的请求,形成循环。 3. **数据库同步**:在服务器端,数据通常存储在数据库中。当多个客户端同时操作同一...

Global site tag (gtag.js) - Google Analytics