`
zjnbshifox
  • 浏览: 316185 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

使用Nginx的NHPM模块和jQuery进行的Comet测试

阅读更多
原文在这里:http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/
一直很想了解Comet的实现,正好看见了上面的这个文章,就装了个CentOS做了一下实验,过程如下:
1、下载软件和安装
引用

wget http://pushmodule.slact.net/downloads/nginx_http_push_module-0.692.tar.gz
tar -xvzf nginx_http_push_module-0.692.tar.gz
wget http://nginx.org/download/nginx-0.8.52.tar.gz
tar -xvzf nginx-0.8.52.tar.gz
./configure --prefix=/usr/local/nginx --add-module=/root/nginx_http_push_module-0.692 
make
sudo make install

configure过程中会提示哪些包没有,我的就是pcre-devel包没有,直接使用光盘rpm 安装上就可以了
2、配置文件,修改nginx的配置文件nginx.conf,并启动nginx
引用

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    server {
    listen  81;
    server_name localhost;

    root /var/www/localhost;

    location /cheetah {
        push_channel_group pushmodule_cheetah;
        location /cheetah/pub {
            set $push_channel_id cheetah;
            push_publisher;
            push_message_timeout 5s;        # Give the clients time
            push_message_buffer_length 10;  # to catch up
        }
        location /cheetah/sub {
            set $push_channel_id cheetah;
            push_subscriber;
            send_timeout 3600;
        }
    }
    }
}

启动nginx
引用

/usr/local/nginx/sbin/nginx

3、编辑html测试文件,send.html用来发送信息,listen.html则是接受信息,当然保证jquery在相应的目录中。
send.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Send</title>
       <script type="text/javascript" src="javascript/jquery-1.4.2.js"></script>
        <script type="text/javascript">
        /* <![CDATA[ */
    alert('aa');
    function showResult(status, response) {
        $('#result').html('<strong>status:</strong> ' + status +
        '<br /><strong>response:</strong><br />' + response);
    };
 
    $(document).ready(function() {
        $('#pub').submit(function() {
            message = $('#message').val();
      
            /* Do not send empty message */
            if (message == '') {
                return false;
            }
      
            $.ajax({
                url: '/cheetah/pub',
                data: message,
                dataType: 'text',
                type: 'post',
                success: function(responseText, textStatus, xhr) {
                    showResult(textStatus, responseText);
                },
                error: function(xhr, textStatus, errorThrown) {
                    showResult(textStatus, errorThrown);
                }
            });
            return false;
        });
    });
        /* ]]> */
        </script>

    </head>
    <body>
        <form id="pub" method="post" action="/cheetah/pub">
            <input type="text" class="message" name="message" id="message" />
            <input class="submit" type="submit" value="send" />
        </form>
        <div id="result"></div></div>
    </body>
</html>

listen.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Listen</title>
        <script type="text/javascript" src="javascript/jquery-1.4.2.js"></script>
        <script type="text/javascript">
        /* <![CDATA[ */
 
   function listen(last_modified, etag) {
       $.ajax({
           'beforeSend': function(xhr) {
               xhr.setRequestHeader("If-None-Match", etag);
               xhr.setRequestHeader("If-Modified-Since", last_modified);
           },
           url: '/cheetah/sub',
           dataType: 'text',
           type: 'get',
           cache: 'false',
           success: function(data, textStatus, xhr) {
               etag = xhr.getResponseHeader('Etag');
               last_modified = xhr.getResponseHeader('Last-Modified');

               div = $('<div class="msg">').text(data);
               info = $('<div class="info">').text('Last-Modified: ' + last_modified + ' | Etag: ' + etag);

               $('#data').prepend(div);
               $('#data').prepend(info);

               /* Start the next long poll. */
               listen(last_modified, etag);
           },
           error: function(xhr, textStatus, errorThrown) {
               $('#data').prepend(textStatus + ' | ' + errorThrown);
           }
       });
   };

   $(document).ready(function() {
       /* Start the first long poll. */
       /* setTimeout is required to let the browser know
          the page is finished loading. */
       setTimeout(function() {listen('', '');}, 500);
   });
        /* ]]> */
        </script>
        <style type="text/css">
            #data {
                margin: .5em;
            }

            #data .info {
                font-weight: bold;
                font-size: 14px;
            }

            #data .msg {
                white-space: pre;
                font-family: courier;
                font-size: 14px;
                margin-bottom: .5em;
                margin-left: .5em;
            }
        </style>
    </head>
    <body>
        <div id="data"></div>
    </body>
</html>

大功告成,只要在send.html里面输入内容并发送,listen.html就会接收到信息

分享到:
评论

相关推荐

    补充:Nginx之模块处理流程

    Nginx是一个高性能的Web服务器和反向代理服务器,其内部设计采用了模块化的架构,这使得Nginx具有高度灵活性和可扩展性。模块化设计是Nginx的核心特点,它将复杂的系统分解为几个独立的功能组件,每个组件专注于一个...

    第一个Nginx模块的例子

    标题中的“第一个Nginx模块的例子”意味着我们将探讨如何创建一个自定义的Nginx模块。...这个过程涉及到了C语言编程、Nginx API理解和配置文件解析等多个方面,对提升Nginx的使用和开发技能具有重要意义。

    Windows 平台 Nginx Rtmp模块

    Windows 平台 Nginx Rtmp模块编译后的文件,nginx版本是nginx-1.12.1,自测可用 Windows 平台 Nginx Rtmp模块编译后的文件,nginx版本是nginx-1.12.1,自测可用

    深入理解Nginx模块开发与架构解析(第2版)

    《深入理解Nginx模块开发与架构解析(第2版)》是一本专注于Nginx技术的专业书籍,针对Nginx的内部工作机制和模块开发进行了深入的探讨。本书旨在帮助读者掌握Nginx的核心概念、架构设计以及如何进行模块开发,从而...

    Nginx模块源码 nginx-notice-2

    4. **安装Nginx**:执行`make install`,将编译后的二进制文件和模块安装到系统指定的目录。 在编译过程中,可能会遇到依赖问题,需要确保所有必要的库和工具都已经安装。例如,Nginx可能需要PCRE(Perl Compatible...

    深入理解Nginx模块开发与架构解析 第2版

    《深入理解Nginx模块开发与架构解析》第二版是一本专为Nginx开发者和运维人员准备的深度学习资料。这本书旨在帮助读者全面掌握Nginx的核心原理、模块开发及系统架构,从而更好地利用Nginx进行高性能的Web服务构建。 ...

    nginx模块开发指南

    模块定义和模块注册则是在模块开发中,将模块功能加入到nginx中的过程,这部分涵盖了如何使模块运行以及与nginx核心通信的方法。 处理模块、过滤模块和负载均衡模块的分析部分,详细地阐述了各个模块类型的具体实现...

    nginx-rtmp模块

    3. **编译并安装**:使用`./configure --add-module=nginx-rtmp-module-master`配置Nginx编译选项,然后进行`make`和`make install`操作。 4. **配置文件**:在Nginx的配置文件(如`nginx.conf`)中添加RTMP模块的...

    win版本带nginx-rtmp模块

    # 使用方法 双击nginx.exe # 简要说明 conf/nginx.conf 为配置文件实例 RTMP监听 1935 端口,启用live 和hls 两个application HTTP监听 8080 端口, * :8080/stat 查看stream状态 * :8080/index.html 为一个直播...

    test-nginx, 面向 Nginx C 模块和 OpenResty Lua库开发的数据驱动测试.zip

    test-nginx, 面向 Nginx C 模块和 OpenResty Lua库开发的数据驱动测试 电子邮件名称Test::Nginx - Nginx MODULE 和 Nginx/openresty库和应用程序的数据驱动测试脚手架 table-内容NAME描述用户指南使用 Test::Nginx ...

    深入理解Nginx模块开发及架构解析

    深入理解Nginx模块开发及架构解析,深入理解Nginx模块开发及架构解析

    深入理解Nginx模块开发与架构解析第2版PDF

    书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识...

    nginx的memcache模块

    **Nginx的Memcache模块**是Web服务器Nginx的一个扩展,用于缓存动态内容,...对于开发和测试,Echo模块可以帮助调试Nginx的响应行为,确保缓存策略正确无误。通过这样的组合,可以显著提升Web应用的性能和响应速度。

    深入理解Nginx:模块开发与架构解析-陶辉.mobi kindle版

    本书首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍如何开发HTTP模块(含HTTP过滤模块)来得到定制的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,如...

    深入理解Nginx:模块开发与架构解析(第2版)+(Linux_Unix技术丛书)+-+陶辉+著

    通过阅读本书,读者不仅可以了解Nginx的基础操作,还能掌握其高级特性和模块开发技术,这对于提升个人在Web服务器领域的专业技能非常有帮助。特别是对于需要进行Nginx二次开发或者想要深入理解Web服务器内部运作的...

    nginx waf 模块,nginx waf so 模块,防CC NGINX 模块

    SO模块的使用使得WAF功能的更新和维护变得更加便捷。在Linux系统中,.so文件是动态链接库的文件格式,它们可以被多个程序共享,从而节省内存资源。 **动态JS人机验证** 动态JS人机验证是Nginx WAF中的一种防御机制...

    Nginx模块开发指南

    《Nginx模块开发指南》是一本专注于讲解如何利用C++11和Boost库进行Nginx模块开发的专业书籍。Nginx作为一个高性能的HTTP和反向代理服务器,其强大的可扩展性使得开发者可以通过编写模块来实现特定的功能,以满足...

    Nginx代理SFTP和TCP协议通讯测试.docx

    Nginx 配置文件中使用了 `stream` 指令来启用流模块,然后使用 `upstream` 指令来指定 SFTP 服务器的地址和端口号。`server` 指令用来指定 Nginx 监听的端口号和协议类型。 例如,在本文档中,Nginx 配置文件如下所...

Global site tag (gtag.js) - Google Analytics