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
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. 上記をインストールしたら、独自のロジックを開始できます
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 チュートリアルに興味のある友人に役立つことを願っています。