调整websocket,加线程处理数据,防止阻塞(可能?)

This commit is contained in:
zlzw 2024-12-10 14:58:12 +08:00
parent d2bcd5c64a
commit 516e030266
4 changed files with 22 additions and 17 deletions

View File

@ -9,7 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication() @SpringBootApplication()
public class BilibiliApplication { public class BilibiliApplication {
public static String version = "0.9"; public static String version = "0.10";
public static void main(String[] args) { public static void main(String[] args) {
Log.i("启动版本", version); Log.i("启动版本", version);

View File

@ -110,7 +110,7 @@ public class BiliLiveDatabase extends SQLiteManager {
} }
} }
public void addSource(WSData bean) { public synchronized void addSource(WSData bean) {
// Log.i("BiliLiveDatabase.addSource", config.getRoomId()); // Log.i("BiliLiveDatabase.addSource", config.getRoomId());
add(new LiveSourceDatabaseBean(bean)); add(new LiveSourceDatabaseBean(bean));
addData(bean); addData(bean);

View File

@ -224,10 +224,13 @@ public class WebSocketServer {
* @param data 待压缩的数据 * @param data 待压缩的数据
*/ */
public void decompress(byte[] data) { public void decompress(byte[] data) {
// Log.i("数据大小:" + header.getDataSize() + " 协议:" + header.getAgree() + " 头部大小:" + header.getHeaderSize() + " 命令:" + header.getCmdData());
Thread.ofVirtual()
.name("TaskUnDanmu-" + Thread.currentThread().getName())
.start(() -> {
byte[] bytes = new byte[data.length - 16]; byte[] bytes = new byte[data.length - 16];
WebSocketHeader header = new WebSocketHeader(data); WebSocketHeader header = new WebSocketHeader(data);
System.arraycopy(data, header.getHeaderSize(), bytes, 0, data.length - header.getHeaderSize()); System.arraycopy(data, header.getHeaderSize(), bytes, 0, data.length - header.getHeaderSize());
// Log.i("数据大小:" + header.getDataSize() + " 协议:" + header.getAgree() + " 头部大小:" + header.getHeaderSize() + " 命令:" + header.getCmdData());
switch (header.getAgree()) { switch (header.getAgree()) {
case 0: case 0:
case 1: case 1:
@ -236,6 +239,8 @@ public class WebSocketServer {
default: default:
unzipDanmu(bytes, header.getAgree() == 3); unzipDanmu(bytes, header.getAgree() == 3);
} }
});
} }
@ -249,7 +254,7 @@ public class WebSocketServer {
DirectDecompress directDecompress = Decoder.decompress(bytes); DirectDecompress directDecompress = Decoder.decompress(bytes);
if (directDecompress.getResultStatus() == DecoderJNI.Status.DONE) { if (directDecompress.getResultStatus() == DecoderJNI.Status.DONE) {
WebSocketBody body = new WebSocketBody(directDecompress.getDecompressedData()); WebSocketBody body = new WebSocketBody(directDecompress.getDecompressedData());
Log.getDynamicLogger(logTag).info("协议:{},命令数:{}", useHeader, +body.getBodyList().size()); Log.getDynamicLogger(logTag).info("协议:{},命令数:{}", useHeader, body.getBodyList().size());
for (JSONObject json : body.getBodyList()) { for (JSONObject json : body.getBodyList()) {
WSData parse = WSData.parse(json); WSData parse = WSData.parse(json);
liveDatabasesService.getLiveDatabase(roomConfig.getRoomId()).addSource(parse); liveDatabasesService.getLiveDatabase(roomConfig.getRoomId()).addSource(parse);

View File

@ -104,7 +104,7 @@ public abstract class SQLiteManager {
} }
} }
protected <T extends AbsDatabasesBean> void add(T t) { protected synchronized <T extends AbsDatabasesBean> void add(T t) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
try (PreparedStatement statement = getConnection().prepareStatement(buildInsertSql(t))) { try (PreparedStatement statement = getConnection().prepareStatement(buildInsertSql(t))) {
JSONObject json = t.toJson(); JSONObject json = t.toJson();
@ -162,7 +162,7 @@ public abstract class SQLiteManager {
return sb.toString(); return sb.toString();
} }
protected <T extends AbsDatabasesBean> void update(T t) { protected synchronized <T extends AbsDatabasesBean> void update(T t) {
try (PreparedStatement statement = getConnection().prepareStatement(buildUpdateSql(t))) { try (PreparedStatement statement = getConnection().prepareStatement(buildUpdateSql(t))) {
JSONObject json = t.toJson(); JSONObject json = t.toJson();
Set<String> keySet = json.keySet(); Set<String> keySet = json.keySet();
@ -367,7 +367,7 @@ public abstract class SQLiteManager {
return json; return json;
} }
protected <T extends AbsDatabasesBean> boolean delete(T t) { protected synchronized <T extends AbsDatabasesBean> boolean delete(T t) {
Statement statement = null; Statement statement = null;
try { try {
statement = getConnection().createStatement(); statement = getConnection().createStatement();