言尽于此,完结
无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。
- 第一,设计模式能让专业人之间交流方便,如下:
程序员A:这里我用了XXX设计模式
程序员B:那我大致了解你程序的设计思路了
- 第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了XXX设计模式,所以改起来很快
- 第三,设计模式是编程经验的总结
程序员A:B,你怎么想到要这样去构建你的代码
程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题
- 第四,学习设计模式并不是必须的
程序员A:B,你这段代码使用的是XXX设计模式对吗?
程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的
从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!
搜集费时费力,能看到此处的都是真爱!
});
server.bind(8080).sync().channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
上述代码是使用Netty WebSocket的简单服务器示例。通过构建`ServerBootstrap`实例,并设置相关的handler和参数,我们可以开启一个WebSocket服务器。
在使用Netty WebSocket时,我们需要添加Netty WebSocket依赖。我们可以通过Maven来管理依赖,添加以下依赖配置:
io.netty netty-all 4.1.53.Final
### 4. Spring WebSocket
Spring WebSocket是Spring框架中的一部分,通过Spring WebSocket,我们可以很方便地集成WebSocket功能到Spring应用程序中。
示例代码如下所示:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new ChatHandler(), “/chat”).setAllowedOrigins(“*”);
}
}
public class ChatHandler extends TextWebSocketHandler {
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
System.out.println("Message: " + message.getPayload());
}
}
上述代码是一个使用Spring WebSocket的示例。通过`WebSocketConfigurer`和`WebSocketHandlerRegistry`接口,我们可以轻松地注册并配置WebSocket处理器。
在使用Spring WebSocket时,我们需要添加Spring WebSocket依赖。我们可以通过Maven来管理依赖,添加以下依赖配置:
org.springframework.boot spring-boot-starter-websocket 2.4.0
### 5. 基于Java WebSocket API的聊天应用
我们可以使用Java WebSocket API来构建一个简单的聊天室应用程序。下面是一个使用Java WebSocket API的聊天服务器示例:
@ServerEndpoint(“/chat”)
public class ChatServer {
private static Set sessions = Collections.synchronizedSet(new HashSet<>());
@OnOpen
public void onOpen(Session session) {
sessions.add(session);
System.out.println("New connection: " + session.getId());
}
@OnMessage
public void onMessage(String message, Session session) {
sendMessageToAll("Message from " + session.getId() + ": " + message);
}
@OnClose
public void onClose(Session session) {
sessions.remove(session);
System.out.println("Connection closed: " + session.getId());
}
private void sendMessageToAll(String message) {
for (Session session : sessions) {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上述代码定义了一个WebSocket服务器,用于处理聊天室中的消息。当有新的连接建立时,`onOpen`方法会被调用,将连接添加到会话列表中。当接收到消息时,`onMessage`方法会将该消息发送给所有连接。当连接关闭时,`onClose`方法会将该连接从会话列表中删除。
在浏览器中,我们可以使用JavaScript的WebSocket API来连接到该聊天服务器:
var socket = new WebSocket(“ws://localhost:8080/chat”);
socket.onopen = function() {
console.log(“Connected to server”);
};
socket.onmessage = function(event) {
console.log("Message received: " + event.data);
};
socket.onclose = function(event) {
console.log(“Connection closed”);
};
function sendMessage() {
var message = document.getElementById(“message”).value;
socket.send(message);
document.getElementById(“message”).value = “”;
}
上述代码连接到聊天服务器,并在接收到新消息时打印在控制台上。通过`sendMessage`函数,我们可以将输入框中的消息发送给聊天服务器。
### 6. 基于Jetty WebSocket的实时股票行情应用
我们可以使用Jetty WebSocket来创建一个实时股票行情应用程序。下面是一个使用Jetty WebSocket的股票服务器示例:
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
import java.util.Random;
@WebSocket
public class StockHandler {
private Session session;
private Random random = new Random();
@OnWebSocketConnect
public void onConnect(Session session) {
this.session = session;
System.out.println("New connection: " + session.getRemoteAddress());
Thread thread = new Thread(() -> {
try {
while (true) {
int price = random.nextInt(100);
session.getRemote().sendString(String.valueOf(price));
Thread.sleep(1000); // 每一秒发送一次股价
}
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
}
@OnWebSocketMessage
public void onMessage(String message) {
// 不处理客户端发送的消息
}
}
在上述代码中,`onConnect`方法在新连接建立时被调用。我们通过定时线程发送随机生成的股票价格,将其作为实时的股票行情数据。通过`session.getRemote().sendString`方法,我们将股票价格发送给客户端。
在浏览器中,我们可以使用JavaScript的WebSocket API来连接到股票服务器,并在接收到新的股票价格时进行处理。
var socket = new WebSocket(“ws://localhost:8080/stock”);
socket.onopen = function() {
console.log(“Connected to server”);
};
socket.onmessage = function(event) {
var price = event.data;
console.log("Stock price: " + price);
// 在页面上更新股票价格
document.getElementById(“stockPrice”).innerText = price;
};
socket.onclose = function(event) {
console.log(“Connection closed”);
};
上述代码将接收到的股票价格打印在控制台上,并将其更新到页面上显示。
### 7. 基于Spring WebSocket的实时聊天室应用
我们可以使用Spring WebSocket来构建一个实时的聊天室应用程序。下面是一个使用Spring WebSocket的聊天服务器示例:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new ChatHandler(), “/chat”).setAllowedOrigins(“*”);
}
}
public class ChatHandler extends TextWebSocketHandler {
private List sessions = new CopyOnWriteArrayList<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("New connection: " + session.getRemoteAddress());
sessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
System.out.println("Message: " + message.getPayloadAsString());
for (WebSocketSession s : sessions) {
s.sendMessage(message);
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("Connection closed: " + session.getRemoteAddress());
sessions.remove(session);
}
}
在上述代码中,`ChatHandler`被定义为WebSocket处理器,用于处理聊天室消息。在连接建立时,`afterConnectionEstablished`方法会被调用,并将新的会话添加到会话列表中。当接收到消息时,`handleTextMessage`方法会将该消息发送给所有的会话。当连接关闭时,`afterConnectionClosed`方法会将该会话从会话列表中删除。
在浏览器中,我们可以使用JavaScript的WebSocket API来连接到聊天服务器,并在接收到新消息时进行处理。
var socket = new WebSocket(“ws://localhost:8080/chat”);
socket.onopen = function() {
console.log(“Connected to server”);
};
socket.onmessage = function(event) {
var message = event.data;
console.log("Message received: " + message);
最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
[外链图片转存中…(img-pTH4sqQ1-1715557129197)]