EventDispatcher: 未注册的事件类型抛出 HandlerNotFoundException 导致 WebSocket 断连
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- java
- Domaine
- api, backend, networking
Piste de recherche
Commencez par suivre EventDispatcher.Builder et ws.Client.handleDataFrame, puis examinez comment HandlerNotFoundException est interceptée et convertie en une réponse 500. Déterminez si le comportement choisi est un gestionnaire de secours ou une réussite silencieuse pour les événements non enregistrés. Le travail est terminé lorsque les événements WebSocket non enregistrés sont traités sans entraîner la fermeture de la connexion.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
问题描述
当 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();
- Langage dominant
- Java
- Étoiles
- 311
- Forks
- 115
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de larksuite/oapi-sdk-java
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
larksuite/oapi-sdk-java#196 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
larksuite/oapi-sdk-java#191 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
larksuite/oapi-sdk-java#149 ·
-
接口响应类型错误Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
larksuite/oapi-sdk-java#79 ·
-
什么时候能加入云文档的"修订"功能Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
larksuite/oapi-sdk-java#195 ·
Toutes les issues de larksuite/oapi-sdk-java
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
component/zeebe kind/bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
UniversalMediaServer/UniversalMediaServer#6356 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
refinedmods/refinedstorage2#1414 · 1 commentaire ·
-
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
yegor256/rultor-image#76 · 1 commentaire ·