EventDispatcher: 未注册的事件类型抛出 HandlerNotFoundException 导致 WebSocket 断连
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- java
- Ambito
- api, backend, networking
Direzione di ricerca
Inizia tracciando EventDispatcher.Builder e ws.Client.handleDataFrame, quindi esamina come HandlerNotFoundException viene intercettata e convertita in una risposta 500. Chiarisci se il comportamento scelto sia un handler di fallback o un successo silenzioso per gli eventi non registrati. Il lavoro è completato quando gli eventi WebSocket non registrati vengono gestiti senza causare la chiusura della connessione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
问题描述
当 WebSocket 长连接收到未在 EventDispatcher 中注册 handler 的事件类型时,SDK 抛出 HandlerNotFoundException。该异常在 ws.Client.handleDataFrame 中被内部 catch,SDK 发送 500 响应给飞书服务端,可能导致服务端主动断开 WebSocket 连接。
关键问题:异常在 SDK 内部被吞掉,应用层无法感知,且 SDK 没有提供 fallback handler 机制来让外部代码处理未注册的事件。
复现路径
- 使用 WebSocket 长连接模式
EventDispatcher只注册部分 IM 事件的 handler(如P2MessageReceiveV1)- 飞书服务端推送未注册的事件(如
im.message.read_v1、im.chat.member.bot.deleted_v1等) - SDK 抛出
HandlerNotFoundException→ catch → 发送 500 → 连接可能断开
期望行为
EventDispatcher.Builder提供 fallback handler 机制(如.onUnhandledEvent(handler)),让外部代码可以统一处理未注册的事件类型- 或者未注册的事件类型被静默忽略(返回 200),而非抛异常导致 500 响应
当前版本
oapi-sdk: 2.6.1
当前 workaround
在 EventDispatcher.Builder 上为所有可能的事件类型注册空 handler,但这需要手动维护,且无法覆盖 SDK 未来新增的事件类型。
// 需要手动注册所有已知事件的空 handler
EventDispatcher.newBuilder("", "")
.onP2MessageReceiveV1(handler)
.onP2MessageReactionCreatedV1(event -> {})
.onP2MessageReactionDeletedV1(event -> {})
.onP2MessageReadV1(event -> {})
.onP2MessageRecalledV1(event -> {})
.onP2ChatMemberBotAddedV1(event -> {})
.onP2ChatMemberBotDeletedV1(event -> {})
// ... 还有更多
.build();
- Lingua principale
- Java
- Stelle
- 310
- Fork
- 115
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di larksuite/oapi-sdk-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
larksuite/oapi-sdk-java#196 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
larksuite/oapi-sdk-java#191 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
larksuite/oapi-sdk-java#149 ·
-
接口响应类型错误Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
larksuite/oapi-sdk-java#79 ·
-
什么时候能加入云文档的"修订"功能Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
larksuite/oapi-sdk-java#195 ·
Tutte le issue di larksuite/oapi-sdk-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenAPITools/openapi-generator#25014 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
AloisSeckar/demos-java#380 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
openhab/openhab-core#5847 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
appsmithorg/appsmith#42297 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100