Nginx implementiert eine Anwendung für lange Verbindungen

WBOY
Freigeben: 2016-08-08 09:31:45
Original
1660 Leute haben es durchsucht

Egal, ob Sie ein Web-Backend, ein App-Backend oder einen SOA-Dienst nutzen, eine lange Verbindung ist einerseits eine gute Wahl, da dadurch der Ressourcenverbrauch bei jedem Verbindungsaufbau gespart wird Responsive, verbesserte Erfahrung.

Hier ist eine Möglichkeit, lange Verbindungen über das Nginx-Modul zu implementieren. Streng genommen ist das http-Protokoll selbst ein Anforderungs-Antwort-Typ und es gibt keine strikte lange Verbindung Die sogenannte lange Verbindung bedeutet, dass Sie bei keiner Antwort warten können, bis eine Antwort erfolgt, und die Verbindung dann sofort wieder herstellen können.

Lassen Sie uns darüber sprechen, wie wir es erreichen können.

1. Laden Sie zuerst NGiNX_HTTP_Push_Module und diese beiden TAR-Dateien herunter.


2 Linux-System und führen Sie es im Nginx-Verzeichnis aus:

  ./configure --add-module=path/to/nginx_http_push_module ... 
	make
	make install
Nach dem Login kopieren

3. Es kann sein, dass das PCRE-Modul nicht gefunden wird. Wenn Sie ein Centos-System haben, verwenden Sie yum -y install pcre-devel openssl Openssl-devel installieren
Fahren Sie nach der Installation mit der Installation von Nginx fort

4. Konfigurieren Sie nach der Installation von Nginx die lange Verbindung:

in /use nginx.conf Datei
in /local/nginx/conf Hinzufügen:

  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; 
}
Nach dem Login kopieren

5. Starten Sie ngnix neu und besuchen Sie http://yourIP:port/activity?id =Ihr Kanal, falls Der Browser wartet weiter.
Dann schreiben Sie einen Code, um eine Nachricht zu veröffentlichen. Wenn der Browser diese empfangen kann, bedeutet dies, dass die Installation erfolgreich ist!

    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();
        }
    }
Nach dem Login kopieren

6. Nachdem das oben Gesagte installiert ist, können wir unsere eigene Logik starten.

Das Folgende ist das Abhörterminal Zur Implementierung müssen wir immer ein lastModified auf der Abhörseite aufzeichnen. Diese Zeit stellt die Zeit dar, zu der die letzte neue Nachricht empfangen wurde.

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();
            }
        }
    }
Nach dem Login kopieren

Das Folgende ist das Sendeende: wann Wir haben es getestet. Der verwendete Code ist derselbe.

        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();
        }
    }
Nach dem Login kopieren
An diesem Punkt ist unsere Lösung vollständig.

Das Obige hat Nginx zum Implementieren langer Verbindungsanwendungen eingeführt, einschließlich einiger Aspekte der Anwendung. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage