Nginxは長時間接続アプリケーションを実装します

WBOY
リリース: 2016-08-08 09:31:45
オリジナル
1660 人が閲覧しました

Web バックエンド、アプリ バックエンド、SOA サービスのいずれを実行する場合でも、長い接続は、毎回接続を確立するためのリソースの消費を節約する一方で、メッセージにタイムリーに応答できるようになります。エクスペリエンスが向上しました。

これは、Nginx モジュールを介して長い接続を実装する方法です。厳密に言えば、http プロトコル自体には厳密な長い接続はありません。これは、応答がない場合、応答があるまで保留し、その後すぐに接続を再確立できることを意味します。

それを達成する方法について話しましょう。

1. まず、NGiNX_HTTP_Push_Module と Nginx、これら 2 つの tar ファイルを Linux システムにコピーし、nginx ディレクトリで実行します。 Centos システムを使用している場合は、yum -y install pcre-devel openssl openssl-devel を使用してインストールします
インストール後、nginx のインストールを続けます

4。最後に、長い接続を設定します:

/use/local/nginx/conf の nginx.conf ファイルに次を追加します:


  ./configure --add-module=path/to/nginx_http_push_module ... 
	make
	make install
ログイン後にコピー

5. ngnix を再起動し、http://yourIP:port/activity にアクセスします。 ?id =あなたのチャンネル、ブラウザが待機し続ける場合、次に、ブラウザがメッセージを受信できる場合は、インストールが成功したことを意味します。


  location /publish { 
    set $push_channel_id $arg_id; 
    push_publisher; 
    push_store_messages on; 
    push_message_timeout 2h; 
    push_max_message_buffer_length 10; 
} 
location /activity { 
    push_subscriber; 
    set $push_channel_id $arg_id; 
    push_subscriber_concurrency broadcast; 
    default_type text/plain; 
}
ログイン後にコピー

6. 上記をインストールしたら、独自のロジックを開始できます

以下はリスニング側での lastModified を常に記録する必要があります。彼が最後に受信した新しいメッセージの時刻



    public void testNginx(){
        String http = "http://172.16.4.108/publish?id=my";
        PostMethod postMethod = new PostMethod(http);
        RequestEntity requestEntity = new StringRequestEntity("444");
        postMethod.setRequestEntity(requestEntity);
        try{
            int status =this.client.executeMethod(postMethod);
            if (status == HttpStatus.SC_OK) {
                String text = postMethod.getResponseBodyAsString();
                System.out.println(text);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
ログイン後にコピー

以下はメッセージ送信終了です: これはテスト中に使用したコードと同じです


private static String etag = "";
    private static String lastModified = "";
    public static void main(String[] args){
        while (true) {
            HttpClient httpClient = new HttpClient();
            String http = "http://172.16.4.108/activity?id=my";
            GetMethod getMethod = new GetMethod(http);
            getMethod.setRequestHeader("Connection","keep-alive");
            getMethod.setRequestHeader("If-None-Match", etag);
            getMethod.setRequestHeader("If-Modified-Since", lastModified);
            try {
                int status = httpClient.executeMethod(getMethod);
                if(getMethod.getResponseHeader("Etag") != null) {
                    etag = getMethod.getResponseHeader("Etag").getValue();
                }
                if(getMethod.getResponseHeader("Last-Modified") != null) {
                    lastModified = getMethod.getResponseHeader("Last-Modified").getValue();
                }
                System.out.println("etag=" + etag + ";lastmodif=" + lastModified + ";status=" + status);
                if (status == HttpStatus.SC_OK) {
                    String text = getMethod.getResponseBodyAsString();
                    System.out.println(text);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
ログイン後にコピー

この時点で、私たちのソリューションは完了です。

上記では、アプリケーションの側面も含めて、Nginx を使用して長時間接続アプリケーションを実装する方法を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート