Nginx的nginx_http_push_module模塊,能夠使nginx服務器成爲一個comet服務器html
能夠接受Client端的一個長鏈接請求,當server端有消息push時,則返回消息給Clientpython
1. 編譯很簡單:nginx
–add-module=../slact-nginx_http_push_module後端
2.配置以下:瀏覽器
3.測試:緩存
瀏覽器端訪問http://localhost/activity?id=10000,則請求會被堵塞服務器
用python寫一個簡單的post程序,向http://localhost//publish?id=10000上post數據,則瀏覽器端會立刻獲得該消息less
注意:請求publish時,若是要發佈消息,則必須得是POST請求,並且對應的Content-Type會被轉發給長鏈接的Client。Get請求會返回當前是否有存在的channel_id。具體的Http Push協議細節,可參考http://pushmodule.slact.net/protocol.htmlide
4.一些問題:post
5.部分協議細節:
GET
requests to the subscriber
location. All other request methods SHOULD be responded to with a
405 Method Not Allowed
status code.
Subscriber requests are considered notifications of intent to receive some message. Subscribers may request existing messages, messages that are not yet available, and messages that are no longer available. The requested message is identified using the If-Modified-Since
and If-None-Match
request headers. A request with no If-Modified-Since
header MUST be assumed to be requesting the oldest available message in a channel. Each 200 OK
response containing a message MUST have itsLast-Modified
and Etag
headers set so that a request using those headers will be interpreted as a request for the next available message. Additionally, said 200 OK
MUST contain the Content-Type
header of the message publisher request, unless no Content-Type
header had been provided or it is explicitly overridden by server configuration.
There are several common mechanisms for performing an HTTP server push. The rest of the behavior of the server in response to a subscriber request SHOULD be configurable and MUST be selected from the following list of mechanisms:
200 OK
response containing the message (and its Content-Type
) MUST be sent immediately after the message becomes available410 Gone
response.409 Conflict
response.
304 Not Modified
response code.
In addition, when the server receives more than one concurrent subscriber request on the same channel, it MUST do one of the following:
409 Conflict
response.
409 Conflict
The server SHOULD make this selection configurable, and MUST default to broadcast
behavior.
200 OK
response for existing channels and a 404 Not Found
otherwise.200 OK
response. The request creates a channel if no channel with the given channel id exists.200 OK
if the channel identified by the channel id exists and has been completely deleted. All subscribers MUST have been sent a410 Gone
response. Requests for nonexistent channels MUST be responded to with a 404 Not Found
.POST requests are used to send messages. The request MAY contain a body in any encoding representing a message to be sent over thechannel. Themessage MUST be immediately delivered to all currently long-held subscriber requests. Additionally, the message MAY be stored for future retrieval and the oldest message stored for the channel MAY be deleted.
A POST request MUST be replied to with a 201 Created
if there were any long-held subscribers that have been sent thismessage, and with a 202 Accepted
otherwise.
The Content-Type header of the request MUST be forwarded with the message.