Heim > Artikel > Backend-Entwicklung > Nginx implementiert eine Anwendung für lange Verbindungen
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
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; }
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(); } }
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(); } } }
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(); } }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.