> 백엔드 개발 > PHP 튜토리얼 > Nginx는 긴 연결 애플리케이션을 구현합니다.

Nginx는 긴 연결 애플리케이션을 구현합니다.

WBOY
풀어 주다: 2016-08-08 09:31:45
원래의
1687명이 탐색했습니다.

웹 백엔드, 앱 백엔드, SOA 서비스 중 무엇을 하든 긴 연결은 한편으로는 매번 연결을 설정하는 데 드는 리소스 소비를 절약하는 좋은 선택입니다. 적시에 응답하고 향상된 경험을 제공합니다.

다음은 Nginx 모듈을 통해 긴 연결을 구현하는 방법입니다. 엄밀히 말하면 http 프로토콜 자체는 요청-응답 유형이며 엄격한 긴 연결이 없습니다. 소위 긴 연결이란 응답이 없을 때 응답이 있을 때까지 유지했다가 즉시 연결을 다시 설정할 수 있음을 의미합니다.

이를 달성하는 방법에 대해 이야기해 보겠습니다.

1. 먼저 이 두 tar 파일인 NGiNX_HTTP_Push_Module과 Nginx를 다운로드합니다.


2. linux 시스템을 설치하고 nginx 디렉터리에서 실행합니다:

  ./configure --add-module=path/to/nginx_http_push_module ... 
	make
	make install
로그인 후 복사

3. pcre 모듈을 찾을 수 없는 등의 문제가 있을 수 있습니다. Centos 시스템인 경우 yum -y install pcre-devel openssl을 사용합니다. openssl-devel 설치
설치 후 nginx 설치를 계속하세요

4. nginx가 설치된 후 /use nginx에서

긴 연결을 구성합니다. conf 파일
/local/nginx/conf 추가:

  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; 
}
로그인 후 복사

5. ngnix를 다시 시작하고 http://yourIP:port/activity?id =Your Channel을 방문합니다. 브라우저가 계속 기다리고 있으면
그런 다음 메시지를 게시하는 코드를 작성합니다. 브라우저가 이를 수신할 수 있으면 설치가 성공한 것입니다.

    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();
        }
    }
로그인 후 복사

6. 위 항목이 설치되면 자체 로직을 시작할 수 있습니다.

다음은 간단한 청취 터미널입니다. 구현하려면 청취 측에서 항상 lastModified를 기록해야 합니다. 이 시간은 수신된 마지막 새 메시지의 시간을 나타냅니다.

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();
            }
        }
    }
로그인 후 복사

다음은 전송 종료입니다. 테스트한 코드는 동일합니다

        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();
        }
    }
로그인 후 복사
이제 솔루션이 완성되었습니다.

위에서는 애플리케이션의 측면을 포함하여 긴 연결 애플리케이션을 구현하기 위해 Nginx를 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿