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可能通过WebSocket或者Long Polling等技术实现客户端与服务器的实时交互。WebSocket提供双向通信,可以实现低延迟的消息传递;而Long Polling则是一种变通的解决方案,适用于不支持WebSocket的环境。 3. **消息...
4. 实时通信技术:实现聊天功能,可能使用了WebSocket或者Long Polling等实时通信技术。WebSocket允许双向通信,提供低延迟、高效的数据传输,适合实时聊天场景。而Long Polling是HTTP长连接的一种实现方式,适合对...
这个系统可能采用了WebSocket或Long Polling等技术来实现。WebSocket提供双向通信,允许服务器主动推送消息,而Long Polling则是客户端持续请求服务器,直到有新消息时才返回,确保消息的即时性。 4. **群聊功能**...
这通常通过轮询(Polling)、长轮询(Long Polling)或者WebSocket等技术实现,其中WebSocket能提供双向通信,实现真正的实时性。 为了实现聊天室的功能,以下是一些关键的技术点: 1. **数据传输协议**:Flash与...
1. **长轮询(Long Polling)**:客户端向服务器发送请求,服务器接收请求后并不立即响应,而是等待有新数据可用时才返回。如果在预设的超时时间内没有新数据,服务器会返回一个空响应,客户端收到响应后再次发起请求...
传统的PHP聊天室通常采用轮询(polling)或长轮询(long polling)技术。轮询方式中,客户端定时向服务器发送请求,询问是否有新消息,这种方式虽简单但效率较低,当用户数量增加时,服务器压力会显著增大。长轮询则...
标题中的"long-pooling-php"指的是在PHP环境中实现的长轮询(Long-Polling)技术。长轮询是HTTP持久连接的一种实现方式,常用于实现实时通信,特别是WebSocket出现之前,它是一种常见的替代方案。 长轮询的工作原理...
8. **Real-time Communication**:为了让聊天实时,可以利用WebSockets或者基于轮询(如Long Polling)的技术。Laravel的`Broadcasting`功能结合Pusher或Redis等服务可以实现WebSocket功能,实时推送消息到客户端。 ...
我们必须使用Apache / nginx / cowboy或其他生产Web服务器。 将文件夹server设置为Web服务文档的根目录和目录。 正如我们在文件resources/assets/angular/home/home.config.js我正在使用chatty.dev作为远程端点,...
这可能需要使用WebSocket技术实现双向实时通信,或者使用PHP的轮询(polling)或长轮询(long-polling)技术。WebSocket能提供低延迟的双向通信,但需要服务器支持。 6. **前端技术**:为了构建用户界面,开发者...
Web服务器处理初始的聊天请求,如获取消息历史和在线用户列表,而实际的聊天消息接收则通过Erlang编写的Channel服务器实现,利用long-polling技术。发送的消息通过Web层传递给Channel服务器,聊天记录由C++写的...
- **Long Polling**:客户端发起一个请求,服务器保持连接直到有新数据可用,然后立即响应,客户端再发起新的请求,形成循环。 3. **数据库同步**:在服务器端,数据通常存储在数据库中。当多个客户端同时操作同一...