|
|
@@ -28,6 +28,7 @@ import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
+import java.util.concurrent.ThreadLocalRandom;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static com.fs.common.constant.LiveKeysConstant.*;
|
|
|
@@ -415,17 +416,40 @@ public class WebSocketServer {
|
|
|
|
|
|
room.forEach((k, v) -> {
|
|
|
if (v.isOpen()) {
|
|
|
- v.getAsyncRemote().sendText(message);
|
|
|
+ sendWithRetry(v,message,7);
|
|
|
}
|
|
|
});
|
|
|
adminRoom.forEach(v -> {
|
|
|
if (v.isOpen()) {
|
|
|
- v.getAsyncRemote().sendText(message);
|
|
|
+ sendWithRetry(v,message,7);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private void sendWithRetry(Session session, String message, int maxRetries) {
|
|
|
+ int attempts = 0;
|
|
|
+ while (attempts < maxRetries) {
|
|
|
+ try {
|
|
|
+ if(session.isOpen()) {
|
|
|
+ session.getAsyncRemote().sendText(message);
|
|
|
+ }
|
|
|
+ return; // 发送成功,退出
|
|
|
+ } catch (Exception e) {
|
|
|
+ if (e.getMessage() != null && e.getMessage().contains("TEXT_FULL_WRITING")) {
|
|
|
+ attempts++;
|
|
|
+ try {
|
|
|
+ TimeUnit.MILLISECONDS.sleep(ThreadLocalRandom.current().nextInt(5, 100));
|
|
|
+ } catch (InterruptedException ie) {
|
|
|
+ Thread.currentThread().interrupt();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("超过重试次数, 消息 {}",message);
|
|
|
+ }
|
|
|
|
|
|
public void handleAutoTask(LiveAutoTask task) {
|
|
|
SendMsgVo msg = new SendMsgVo();
|