WebSocket HTML5


WebSocket est un protocole de communication full-duplex sur une seule connexion TCP que HTML5 a commencé à fournir.

Dans l'API WebSocket, le navigateur et le serveur n'ont besoin que d'effectuer une action de prise de contact, puis un canal rapide est formé entre le navigateur et le serveur. Les données peuvent être transmises directement entre les deux.

Le navigateur envoie une demande au serveur pour établir une connexion WebSocket via JavaScript. Une fois la connexion établie, le client et le serveur peuvent échanger directement des données via la connexion TCP.

Après avoir obtenu la connexion Web Socket, vous pouvez envoyer des données au serveur via la méthode send() et recevoir les données renvoyées par le serveur via onmessage événement.

L'API suivante est utilisée pour créer des objets WebSocket.

var Socket = new WebSocket(url, [protocal] );

Le premier paramètre url dans le code ci-dessus spécifie l'URL de la connexion. Le deuxième paramètre protocole est facultatif et spécifie les sous-protocoles acceptables.


Propriétés WebSocket

Voici les propriétés de l'objet WebSocket. Supposons que nous utilisions le code ci-dessus pour créer un objet Socket :

Propriétés Description
Socket.readyState
属性描述
Socket.readyState

只读属性 readyState 表示连接状态,可以是以下值:

  • 0 - 表示连接尚未建立。

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

  • 2 - 表示连接正在进行关闭。

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

Socket.bufferedAmount

只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。

Propriété en lecture seule
readyState

représente l'état de la connexion, qui peut être le suivant valeurs :

  • 0 - signifie que la connexion n'a pas encore été établie.

  • 事件事件处理程序描述
    openSocket.onopen连接建立时触发
    messageSocket.onmessage客户端接收服务端数据时触发
    errorSocket.onerror通信发生错误时触发
    closeSocket.onclose连接关闭时触发
    1 - Indique que la connexion est établie et que la communication est possible.
  • 2 - Indique que la connexion est en cours de fermeture.

  • 3 - Indique que la connexion a été fermée ou que la connexion ne peut pas être ouverte.

Socket.bufferedAmount
方法描述
Socket.send()

使用连接发送数据

Socket.close()

关闭连接

La propriété en lecture seule <🎜>bufferedAmount<🎜> has been send() place le nombre d'octets de texte UTF-8 qui sont en file d'attente pour la transmission mais qui n'ont pas encore été envoyés. <🎜>
<🎜><🎜>Événements WebSocket <🎜><🎜>Les événements suivants sont liés à l'objet WebSocket. Supposons que nous utilisions le code ci-dessus pour créer un objet Socket : <🎜><🎜><🎜><🎜>Méthodes WebSocket <🎜><🎜>Voici les méthodes pertinentes de l'objet WebSocket. Supposons que nous utilisions le code ci-dessus pour créer un objet Socket : <🎜>
MéthodeDescription
Socket.send()<🎜>Utilisez la connexion pour envoyer des données<🎜>
Socket. close() <🎜>Fermer la connexion<🎜>

Instance WebSocket

Le protocole WebSocket est essentiellement un protocole basé sur TCP.

Afin d'établir une connexion WebSocket, le navigateur client doit d'abord lancer une requête HTTP au serveur. Cette requête est différente de la requête HTTP normale et contient des informations d'en-tête supplémentaires, y compris les informations d'en-tête supplémentaires "Mise à niveau". : WebSocket" Indique qu'il s'agit d'une requête HTTP à appliquer pour une mise à niveau du protocole. Le serveur analyse ces informations d'en-tête supplémentaires, puis génère des informations de réponse et les renvoie au client. La connexion WebSocket entre le client et le serveur est établie, et les deux les parties peuvent communiquer librement via ce canal de connexion, et cette connexion continuera d'exister jusqu'à ce que le client ou le serveur ferme activement la connexion.

HTML et JavaScript côté client

La plupart des navigateurs prennent actuellement en charge l'interface WebSocket(). Vous pouvez essayer des exemples dans les navigateurs suivants : Chrome, Mozilla, Opera et Safari.

Contenu du fichier php_websocket.html

<!DOCTYPE HTML>
<html>
   <head>
   <meta charset="utf-8">
   <title>php中文网(php.cn)</title>
	
      <script type="text/javascript">
         function WebSocketTest()
         {
            if ("WebSocket" in window)
            {
               alert("您的浏览器支持 WebSocket!");
               
               // 打开一个 web socket
               var ws = new WebSocket("ws://localhost:9998/echo");
				
               ws.onopen = function()
               {
                  // Web Socket 已连接上,使用 send() 方法发送数据
                  ws.send("发送数据");
                  alert("数据发送中...");
               };
				
               ws.onmessage = function (evt) 
               { 
                  var received_msg = evt.data;
                  alert("数据已接收...");
               };
				
               ws.onclose = function()
               { 
                  // 关闭 websocket
                  alert("连接已关闭..."); 
               };
            }
            
            else
            {
               // 浏览器不支持 WebSocket
               alert("您的浏览器不支持 WebSocket!");
            }
         }
      </script>
		
   </head>
   <body>
   
      <div id="sse">
         <a href="javascript:WebSocketTest()">运行 WebSocket</a>
      </div>
      
   </body>
</html>

Installer pywebsocket

Avant d'exécuter la procédure ci-dessus, nous devons créer un service prenant en charge WebSocket. Téléchargez mod_pywebsocket depuis pywebsocket, ou utilisez la commande git pour télécharger :

git clone https://github.com/google/pywebsocket.git

mod_pywebsocket nécessite la prise en charge de l'environnement Python

mod_pywebsocket est une extension Web Socket pour Apache HTTP Les étapes d'installation sont les suivantes. :


  • Décompressez le fichier téléchargé.

  • Entrez dans le répertoire pywebsocket.

  • Exécuter la commande :

    $ python setup.py build
    $ sudo python setup.py install
  • Afficher la description du document :

    $ pydoc mod_pywebsocket

Démarrer le service

Exécutez la commande suivante dans le répertoire pywebsocket/mod_pywebsocket :

$ sudo python standalone.py -p 9998 -w ../example/

La commande ci-dessus ouvrira un service avec le numéro de port 9998. Utilisez -w pour définir le gestionnaire où echo_wsh.py se trouve la table des matières.

Nous pouvons maintenant ouvrir le fichier php_websocket.html créé précédemment dans le navigateur Chrome.