JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
这是因为Javascript这门脚本语言诞生的使命所致——JavaScript是为处理页面中用户的交互,以及操作DOM而诞生的。比如我们对某个DOM元素进行添加和删除操作,不能同时进行。应该先进行添加,之后再删除。
单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
这样所导致的问题是:如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
同步和异步
为了解决这个


按顺序执行
//例子:
consol






Java的WebSocket代码机制:
- 引入WebSocket依赖
在Maven项目中,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-server</artifactId>
<version>1.13.1</version>
</dependency>
- 创建服务器端点
使用javax.websocket.server.ServerEndpoint注解创建WebSocket服务器端点,指定路径和处理类:
@ServerEndpoint("/websocket")
public class WebSocketServer {
// 处理连接建立事件
@OnOpen
public void onOpen(Session session) {
// ...
}
// 处理收到消息事件
@OnMessage
public void onMessage(String message, Session session) {
// ...
}
// 处理连接关闭事件
@OnClose
public void onClose(Session session) {
// ...
}
// 处理错误事件
@OnError
public void onError(Throwable error) {
// ...
}
}
- 启动WebSocket服务器
使用javax.websocket.server.ServerContainer启动WebSocket服务器,指定端口和路径:
Server server = new Server("localhost", 8080, "/path");
ServerContainer container = ContainerProvider.getWebSocketContainer();
container.addEndpoint(server);
server.start();
- 创建WebSocket客户端
使用javax.websocket.ClientEndpoint注解创建WebSocket客户端,指定路径和处理类:
@ClientEndpoint("/websocket")
public class WebSocketClient {
// 处理连接建立事件
@OnOpen
public void onOpen(Session session) {
// ...
}
// 处理收到消息事件
@OnMessage
public void onMessage(String message, Session session) {
// ...
}
// 处理连接关闭事件
@OnClose
public void onClose(Session session) {
// ...
}
// 处理错误事件
@OnError
public void onError(Throwable error) {
// ...
}
}
- 连接WebSocket服务器
使用javax.websocket.ClientManager连接WebSocket服务器,指定路径和URI:
ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build();
ClientManager client = ClientManager.createClient();
client.connectToServer(new WebSocketClient(), config, new URI("ws://localhost:8080/path"));
JS的WebSocket代码机制:
- 创建WebSocket对象
使用WebSocket构造函数创建WebSocket对象,指定服务器地址和路径:
var socket = new WebSocket("ws://localhost:8080/path");
- 注册事件处理程序
使用WebSocket对象的onopen、onmessage、onclose和onerror属性注册事件处理程序:
socket.onopen = function(event) {
// ...
};
socket.onmessage = function(event) {
// ...
};
socket.onclose = function(event) {
// ...
};
socket.onerror = function(event) {
// ...
};
- 发送消息
使用WebSocket对象的send方法发送消息:
socket.send("Hello, server!");