nginx 쉽게 comet 서버 푸 시 실현
먼저 nginx 다운로드http_push_모듈 모듈 설치
./configure –add-module=path/to/nginx_http_push_module … make make install
nginx. conf 설정 파일 을 수정 합 니 다. 모듈 명령 의 설정 을 최대한 간소화 하 겠 습 니 다.
location /publish {
set $push_channel_id $arg_id;
push_publisher; #
}
location /activity {
push_subscriber; #
set $push_channel_id $arg_id;
}
그리고 nginx 를 시작 합 니 다. 모든 작업 이 끝 났 습 니 다. nginx 의 '게시 - 구독' 기능 을 테스트 해 보 세 요.
브 라 우 저 접근 열기http://localhost/activity?id=10000서버 쪽 에서 이 긴 연결 을 유지 하고 내용 이나 4xx, 5xx 의 http 상태 코드 를 되 돌려 주지 않 는 것 을 볼 수 있 습 니 다.
(그 중에서 id = 10000 은 채널 번 호 를 표시 합 니 다. "id" 는 $arg id 변수 로 접 두 사 를 지 운 후의 이름 입 니 다)
perl 스 크 립 트 편집
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request::Common;
my $ua = new LWP::UserAgent;
my $response = $ua->request(
POST 'http://127.0.0.1//publish?id=10000',
Content_Type => 'text/html',
Content => 'hi,i posted a message'
);
my $content = $response->content;
print $content;
perl 스 크 립 트 를 저장 하고 실행 하여 지정 한 채널 에 메 시 지 를 발표 한 후에 우 리 는 브 라 우 저가 구독 채널 의 메 시 지 를 받 는 것 을 볼 수 있 습 니 다 'hi, i posted a message'.
위의 실험 을 마치 고 모듈 의 구체 적 인 명령 을 살 펴 보 자.
우선 pushsubscriber [long - poll | interval - poll] 구독 자 역할 을 지정 합 니 다. 기본적으로 긴 폴 링 long - poll 을 선택 합 니 다. interval - poll 을 지정 하면 서버 측은 구독 채널 에 메시지 가 없 을 때 304 Not Modified 상 태 를 즉시 되 돌려 줍 니 다.
push 설정 을 통 해subscriber_concurrency [ last | first | broadcast ] 구독 자가 채널 정 보 를 가 져 오 는 순 서 를 제어 합 니 다. 기본 값 은 '방송' 방식 입 니 다. last 는 채널 이 마지막 긴 연결 을 유지 하고 다른 긴 연결 은 409 충돌 오 류 를 되 돌려 줍 니 다.
채널 정 보 를 제어 하 는 다른 명령 도 있 습 니 다.
push_store_messages [on | off], 발 표 된 메시지 저장 여부 push_max_reserved_memory [ size ] ,메시지 저장 공간 크기 push_message_timeout [ time ],메시지 만 료 시간 기타 명령 은 모듈 의 사용 매 뉴 얼 을 참조 할 수 있다.
테스트 1: 간단 한 압력 테스트 병행 효 과 를 만 들 겠 습 니 다. 10000 채널 에 메시지 큐 가 없 을 때 apache 자체 테이프 도구 로 500 개의 테스트 를 모 의 한 다음 에 vmstat 를 보면 시스템 메모리 와 cpu 가 모두 점용 되 지 않 았 음 을 볼 수 있 습 니 다. 다만 디스크 IO 에 변화 가 있 고 쓰기 디스크 가 존재 하 며 즉시 정상 으로 회복 되 었 습 니 다.
vm6245:/usr/sbin # ab2 -c 500 -n 10000 http://localhost/activity?id=10000
vm6245:~/penjin # vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 12312 317364 19056 17480 0 0 0 3 8 5 0 0 100 0 0
0 0 12312 317364 19116 17420 0 0 0 60 38 14 0 0 99 1 0
0 0 12312 317372 19116 17420 0 0 0 0 17 9 0 0 100 0 0
0 0 12312 317372 19116 17420 0 0 0 0 19 7 0 0 100 0 0
테스트 2: 채널 에 소식 이 발표 되면 ab 테스트 결 과 는 다음 과 같 습 니 다.
vm6245:/usr/sbin # ab2 -c 500 -n 10000 http://localhost/activity?id=10000
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests
Server Software: nginx/1.1.13
Server Hostname: localhost
Server Port: 80
Document Path: /activity?id=10001
Document Length: 21 bytes
Concurrency Level: 500
Time taken for tests: 1.191773 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2580000 bytes
HTML transferred: 210000 bytes
Requests per second: 8390.86 [#/sec] (mean)
Time per request: 59.589 [ms] (mean)
Time per request: 0.119 [ms] (mean, across all concurrent requests)
Transfer rate: 2113.66 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 24 22.4 18 74
Processing: 6 30 11.8 36 46
Waiting: 0 13 8.8 11 34
Total: 8 54 32.5 53 117
Percentage of the requests served within a certain time (ms)
50% 53
66% 71
75% 82
80% 88
90% 101
95% 107
98% 112
99% 113
100% 117 (longest request)
500 이 동시에 발생 하 는 상황 에서 응답 속도 가 좋 은 것 을 알 수 있 습 니 다. 또한 vmstat 디 스 플레이 는 프로그램 메모리 의 영향 이 크 지 않 고 cpu 의 점용 도 빠르게 회복 되 었 음 을 알 수 있 습 니 다.
vm6245:~/penjin # vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 12312 319588 20696 20000 0 0 0 3 8 5 0 0 100 0 0
3 0 12312 310776 20700 20516 0 0 0 0 198 23935 10 20 70 0 0
0 0 12312 314864 20820 21176 0 0 0 1244 524 15876 11 31 56 4 0
0 0 12312 315484 20820 21176 0 0 0 0 28 15 0 0 100 0 0
0 0 12312 315484 20820 21176 0 0 0 0 20 6 0 0 100 0 0
0 0 12312 315656 20820 21176 0 0 0 0 19 12 0 0 100 0 0
테스트 1 의 결과 에 주목 합 니 다. 시스템 이 긴 연결 을 유지 할 때 cpu, 메모리, 디스크 IO 의 압력 이 크 지 않 습 니 다. 인터넷 에 서 는 NGiNX HTTP Push Module 모듈 에 메모리 문제 가 있다 고 합 니 다. 긴 연결 을 유지 하 는 메모리 가 적시에 방출 되 지 않 았 기 때 문 입 니 다. 하지만 제 테스트 에 서 는 이러한 주장 이 사실 인지 알 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.