Html 简明教程
HTML - WebSockets
WebSockets 是一种面向 Web 应用程序的下一代双向通信技术,它通过单个套接字进行通信。
WebSockets 允许双向通信,这意味着客户端和服务器都可以独立且同时向彼此发送数据。
在与 Web 服务器建立 Web Socket 连接后,我们可以通过调用 send() 方法将数据从浏览器发送到服务器,并通过 onmessage 事件处理程序从服务器接收数据到浏览器。
Syntax
以下是用于创建新 WebSocket 对象的 API。
var Socket = new WebSocket(url, [protocol] );
这里,第一个参数 url 指明要连接的 URL。第二个属性 protocol 是可选的,如果存在,则指明服务器必须支持的子协议,以便连接成功。
Attributes of WebSocket
以下是 WebSocket 对象的属性。假设我们如上所述创建了 Socket 对象。
Attribute |
Description |
Socket.readyState |
只读属性 readyState 表示连接状态。它可以有以下值。值为 0 表示连接尚未建立。值为 1 表示连接已建立且可以通信。值为 2 表示连接正在进行关闭握手。值为 3 表示连接已关闭或无法打开。 |
Socket.bufferedAmount |
只读属性 bufferedAmount 表示已使用 send() 方法排队的 UTF-8 文本字节数。 |
WebSocket Events
以下是与 WebSocket 对象关联的事件。假设我们如上所述创建了 Socket 对象。
Event |
Values & Event Handler |
Values & Description |
open |
Socket.onopen |
当建立套接字连接时,将发生此事件。 |
message |
Socket.onmessage |
当客户端从服务器接收数据时,将发生此事件。 |
error |
Socket.onerror |
当通信中出现任何错误时,将发生此事件。 |
close |
Socket.onclose |
当连接关闭时,将发生此事件。 |
WebSocket Methods
以下是与 WebSocket 对象关联的方法。假设我们如上所述创建了 Socket 对象。
Method |
Description |
Socket.send() |
send(data) 方法使用连接传输数据。 |
Socket.close() |
close() 方法可用于终止任何现有连接。 |
Setting up HTML client for the server
到目前为止,我们为 WebSocket 设置了一个 Python 服务器。该服务器将在您的终端上运行,因此发送到服务器的任何消息都将在终端上可见。在这里,我们将看到如何设置一个客户端,它可以使用 HTML 和 JavaScript 从服务器接收消息,也可以向服务器发送消息。
在文件夹中创建一个 HTML 文件“index.html”
<!DOCTYPE html>
<html lang="en">
<head>
<title>WebSocket Example</title>
</head>
<body>
<h1>WebSocket Client</h1>
<input type="text"
id="messageInput"
placeholder="Type a message..." />
<button id="sendButton">
Send
</button>
<div id="messages">
</div>
<script>
const socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open',
() => {
console.log('Connected to server');
});
socket.addEventListener('message',
(event) => {
const messageDiv = document.createElement('div');
messageDiv.textContent = event.data;
document.getElementById('messages').appendChild(messageDiv);
});
document.getElementById('sendButton').addEventListener('click',
() => {
const messageInput = document.getElementById('messageInput');
const message = messageInput.value;
socket.send(message);
messageInput.value = '';
});
</script>
</body>
</html>