Heim >Web-Frontend >H5-Tutorial >Eine kurze Analyse der WebSocket- und Server-Push-Events_html5-Tutorialfähigkeiten von HTML5

Eine kurze Analyse der WebSocket- und Server-Push-Events_html5-Tutorialfähigkeiten von HTML5

WBOY
WBOYOriginal
2016-05-16 15:45:541912Durchsuche

WebSockets

Web Sockets ist eine neue Generation bidirektionaler Kommunikationstechnologie für Webanwendungen, die auf einem einzigen Socket ausgeführt wird und in HTML5-kompatiblen Browsern über eine JavaScript-Schnittstelle verfügbar gemacht wird.

Sobald Sie die Web-Socket-Verbindung auf dem Webserver erhalten haben, können Sie Daten vom Browser an den Server senden, indem Sie die send()-Methode aufrufen, und Daten vom Server über den onmessage-Ereignishandler an den Browser empfangen.

Das Folgende ist die API zum Erstellen eines neuen WebSocket-Objekts.

JavaScript-CodeInhalt in die Zwischenablage kopieren
  1. varSocket = new WebSocket(url, [protocal] );
Der erste Parameter URL wird verwendet, um die URL anzugeben, zu der eine Verbindung hergestellt werden soll. Das zweite Attribut – Port – ist optional und gibt, falls angegeben, ein Unterprotokoll an, das der Server für eine erfolgreiche Verbindung unterstützen muss.

WebSocket-Eigenschaften

Im Folgenden sind die Eigenschaften des WebSocket-Objekts aufgeführt. Angenommen, wir haben das obige Socket-Objekt erstellt:
Attribut Beschreibung Socket.readyState Schreibgeschütztes Attribut
readyState stellt den Status der Verbindung dar. Es hat die folgenden Werte:

属性 描述
Socket.readyState

只读属性readyState表示连接的状态。有以下取值:

  1. 0 表示连接尚未建立。

  2. 1 表示连接已建立,可以进行通信。

  3. 2 表示连接正在进行关闭握手。

  4. 3 表示连接已经关闭或者连接不能打开。

Socket.bufferedAmount

只读属性bufferedAmount表示已经使用 send() 方法排队的 URF-8 文本字节数。


  1. 0 bedeutet, dass die Verbindung noch nicht hergestellt wurde.
  2. 1 bedeutet, dass die Verbindung hergestellt ist und eine Kommunikation möglich ist.
    事件 事件处理程序 描述
    open Socket.onopen 建立 socket 连接时触发这个事件。
    message Socket.onmessage 客户端从服务器接收数据时触发。
    error Socket.onerror 连接发生错误时触发。
    close Socket.onclose 连接被关闭时触发。

  3. 2 zeigt an, dass die Verbindung gerade einen schließenden Handshake durchläuft.
  4. 3 bedeutet, dass die Verbindung geschlossen wurde oder nicht geöffnet werden kann.
    方法 描述
    Socket.send()

    send(data) 方法使用连接传输数据。

    Socket.close()

    close() 方法用于终止任何现有连接。

Socket.bufferedAmount Schreibgeschütztes AttributbufferedAmountStellt die Anzahl der URF-8-Textbytes dar, die mit der send()-Methode in die Warteschlange gestellt wurden. WebSocket-Ereignisse Die folgenden Ereignisse beziehen sich auf das WebSocket-Objekt. Angenommen, wir haben das obige Socket-Objekt erstellt: WebSocket-Methoden Die folgenden Methoden beziehen sich auf das WebSocket-Objekt. Angenommen, wir haben das obige Socket-Objekt erstellt: Methode Beschreibung Socket.send() Die send(data)-Methode verwendet eine Verbindung zum Übertragen von Daten. Socket.close() Die Methode close() wird verwendet, um eine bestehende Verbindung zu beenden.

Server-Push-Ereignisse
Herkömmliche Webanwendungen generieren Ereignisse, die an die Webserverseite gesendet werden. Wenn Sie beispielsweise auf einen Link klicken, wird eine neue Seite vom Server angefordert.

Diese Art von Zeit vom Webbrowser bis zum Webserver kann als clientseitiges Ereignis bezeichnet werden.

Mit der Einführung von HTML5 führte WHATWG Web Applications 1.0 einen Ereignisstrom vom Webserver zum Webbrowser namens Server Push Events (SSE) ein. Verwenden Sie SSE, um DOM-Ereignisse kontinuierlich an den Browser des Benutzers zu übertragen.

Diese Ereignis-Streaming-Methode stellt eine dauerhafte Verbindung zum Server her und sendet Daten an den Client, wenn neue Nachrichten verfügbar sind, sodass keine kontinuierliche Abfrage erforderlich ist.

SSE-Webanwendung
Um Server-Push-Ereignisse in einer Webanwendung zu verwenden, müssen wir dem Dokument ein -Element hinzufügen.

Das src-Attribut des

-Elements sollte auf eine URL verweisen, die eine dauerhafte HTTP-Verbindung zum Senden eines Datenstroms mit dem Ereignis bereitstellen sollte.

Diese URL verweist auf ein PHP-, PERL- oder ein beliebiges Python-Skript, das kontinuierlich Ereignisdaten sendet. Hier ist ein einfaches Beispiel einer Webanwendung, die die Serverzeit erwartet.

XML/HTML-CodeInhalt in die Zwischenablage kopieren
  1. >
  2. <html>
  3. <Kopf>
  4. <Skript Typ="text/ Javascript">
  5. /* Definieren Sie hier die Event-Handling-Logik */
  6. Skript>
  7. Kopf>
  8. <Körper>
  9. <div id="sse" >
  10.  <eventsource src="/cgi -bin/ticker.cgi" />
  11. div>
  12. <div id="ticker" >
  13. <ZEIT>
  14. div>
  15. Körper>
  16. html>

Serverseitiges SSE-Skript
Das serverseitige Skript sollte einen Content-Type-Header senden, der den Typ als Text/Ereignisstream angibt, wie unten gezeigt:


Code kopieren
Der Code lautet wie folgt:
Drucken Sie „Content-Type: Text/Ereignis“. -streamnn" ;

Nach dem Festlegen des Inhaltstyps sendet das serverseitige Skript ein Event:-Tag, gefolgt vom Ereignisnamen. Im folgenden Beispiel wird eine mit einer neuen Zeile abgeschlossene Serverzeit als Ereignisname gesendet.


Code kopieren
Der Code lautet wie folgt:
print „Event: server-timen“;

Der letzte Schritt besteht darin, die Ereignisdaten mithilfe des Data:-Tags zu senden, gefolgt vom ganzzahligen Zeichenfolgenwert, der mit einer neuen Zeile abgeschlossen wird, etwa so:


Code kopieren
Der Code lautet wie folgt:
$time = localtime();
print " Daten: $timen";

Das Folgende ist die vollständige ticker.cgi in Perl geschrieben:


Code kopieren
Der Code lautet wie folgt:

#!/usr/bin /perl
print „Content-Type: text/event-streamnn“;
while(true){
print „Event: server-timen“;
$time = localtime();
print " Daten: $timen";
sleep(5);

Verarbeitung von Server-Push-Ereignissen
Lassen Sie uns unsere Webanwendung so ändern, dass sie Server-Push-Ereignisse verarbeitet. Hier ist das letzte Beispiel:

XML/HTML-CodeInhalt in die Zwischenablage kopieren
  1. >  
  2. <html>  
  3. <Kopf>  
  4. <script type="text/ Javascript">  
  5.    document.getElementsByTagName("eventsource")[0].   
  6.             addEventListener("server-time", eventHandler, false);   
  7.    function eventHandler(event)   
  8.    {   
  9.        // vom Server gesendete Alarmzeit   
  10.        document.querySelector('#ticker').innerHTML = event.data;   
  11.   
  12.    }   
  13. Skript>  
  14. Kopf>  
  15. <Körper>  
  16. <div id="sse" >  
  17.    <eventsource src="/cgi -bin/ticker.cgi" />  
  18. div>  
  19. <div id="ticker"  Name="Ticker">  
  20.    [ZEIT]   
  21. div>  
  22. Körper>  
  23. html>  

在测试服务器推送事件之前,建议你确保你的 Web 浏览器支持这一概念.

Stellungnahme:
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