admin管理员组文章数量:1599901
全是贴图了:
多说无益!!!
开始:
实现一个某安的连接管理:
其中步骤1到7列的明明白白,而且一开始就提出了要有connectionManager,这已经是很职业的方式了,至少不是学生气:
这些肯定不够啊,要给我写代码来看看:
默认是python代码,风格良好。
不要用Python,我想用Java
从思路到代码,给安排的明明白白:
得寸进尺,要求用websocket !
进一步去问,ping/pong的实现机理:
这里直接用了中间的ping/pong ,而websocket这个关键词是从上文中带下来 的,这个回答,即说明了ping/pong的原理,也说清楚了实现方式:
这已经很是为难人了。。本拐不死心,继续追,关于稳定性:
问稳定性,已经是中级以上工程师的问题了,回答的处理异常和重连,中规中矩,但对于AI,知足吧!!!
再接着无赖,关于主备地址:
灾备情况,这个事儿其实已经超纲了,即使在工作中,这一层也不应该由应用层的人员来思考。
保持连接:
最终AI的代码如下:
public class WebSocketConnectionManager {
private static WebSocketConnectionManager instance;
private static String primaryAddress;
private static String secondaryAddress;
private static WebSocketClient client;
private static WebSocketContainer container;
private static Session session;
public static WebSocketConnectionManager getInstance() {
if (instance == null) {
instance = new WebSocketConnectionManager();
}
return instance;
}
public void init(String primaryAddress, String secondaryAddress) {
this.primaryAddress = primaryAddress;
this.secondaryAddress = secondaryAddress;
this.client = new WebSocketClient();
this.container = ContainerProvider.getWebSocketContainer();
}
public boolean checkConnection() {
return session != null && session.isOpen();
}
public void createConnection(String address) {
try {
URI uri = URI.create(address);
client.start();
session = container.connectToServer(this, uri);
} catch (Exception e) {
e.printStackTrace();
}
}
public void changeAddress(String primaryAddress, String secondaryAddress) {
if (session == null || !session.isOpen()) {
createConnection(primaryAddress);
} else if (session.getRequestURI().getHost().equals(primaryAddress)) {
createConnection(secondaryAddress);
} else {
createConnection(primaryAddress);
}
}
public void startHeartbeat(long interval, long timeout) {
session.setMaxIdleTimeout(timeout);
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
if (session.isOpen()) {
session.getAsyncRemote().sendPing(null);
}
}, interval, interval, TimeUnit.MILLISECONDS);
}
@OnPong
public void onPong(PongMessage message) {
// 处理pong消息
}
public void reconnect(int retries, long interval, Runnable callback) {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
if (checkConnection()) {
executor.shutdown();
callback.run();
}
createConnection(primaryAddress);
retries--;
if (retries == 0) {
executor.shutdown();
callback.run();
}
}, 0, interval, TimeUnit.MILLISECONDS);
}
public void keepConnection(String primaryAddress, String secondaryAddress) {
reconnect(3, 1000, () -> {
if (checkConnection()) {
return;
}
changeAddress(primaryAddress, secondaryAddress);
});
本文标签: 手把毛骨悚然管理器chatGPTWebSocket
版权声明:本文标题:跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728330696a1154527.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论