修复WebSocket消息接收问题:更新前端订阅路径以匹配后端推送路径

This commit is contained in:
2025-07-25 00:25:46 +08:00
parent bbe8fcd776
commit c5ca1651db
3 changed files with 68 additions and 15 deletions
+56 -10
View File
@@ -93,6 +93,12 @@ export class WebSocketService {
connectHeaders['Authorization'] = `Bearer ${token}`
}
console.log('WebSocket连接配置:', {
userId: this.userId,
hasToken: !!token,
headers: connectHeaders
})
this.client.connect(
connectHeaders,
(frame) => {
@@ -204,7 +210,11 @@ export class WebSocketService {
try {
this.client.send('/app/chat.send', {}, JSON.stringify(chatRequest))
console.log('发送聊天消息:', chatRequest)
console.log('发送聊天消息:', {
...chatRequest,
currentUserId: this.userId,
expectedSubscriptionPath: '/user/queue/messages'
})
} catch (error) {
console.error('发送消息失败:', error)
this.callbacks.onError?.({
@@ -249,16 +259,39 @@ export class WebSocketService {
private subscribeToMessages(): void {
if (!this.client?.connected) return
// 订阅用户私有消息
this.client.subscribe('/user/queue/messages', (message) => {
try {
const wsMessage: WebSocketMessage = JSON.parse(message.body)
console.log('收到WebSocket消息:', wsMessage)
this.callbacks.onMessage?.(wsMessage)
} catch (error) {
console.error('解析WebSocket消息失败:', error)
// 订阅用户私有消息 - 包含用户ID的完整路径
if (this.userId) {
const userQueuePath = `/user/${this.userId}/queue/messages`
console.log('订阅用户私有队列:', userQueuePath)
this.client.subscribe(userQueuePath, (message) => {
try {
const wsMessage: WebSocketMessage = JSON.parse(message.body)
console.log('收到用户私有WebSocket消息:', wsMessage)
this.callbacks.onMessage?.(wsMessage)
} catch (error) {
console.error('解析用户私有WebSocket消息失败:', error)
}
})
}
// 同时订阅基于sessionId的队列(从日志看后端也在使用这个)
if (this.client.ws && this.client.ws.url) {
// 从WebSocket URL中提取sessionId
const urlParts = this.client.ws.url.split('/')
const sessionId = urlParts[urlParts.length - 2] // 倒数第二个部分是sessionId
if (sessionId) {
console.log('订阅基于sessionId的队列:', `/queue/messages-user${sessionId}`)
this.client.subscribe(`/queue/messages-user${sessionId}`, (message) => {
try {
const wsMessage: WebSocketMessage = JSON.parse(message.body)
console.log('收到基于sessionId的WebSocket消息:', wsMessage)
this.callbacks.onMessage?.(wsMessage)
} catch (error) {
console.error('解析基于sessionId的WebSocket消息失败:', error)
}
})
}
})
}
// 订阅广播消息
this.client.subscribe('/topic/broadcast', (message) => {
@@ -270,6 +303,19 @@ export class WebSocketService {
console.error('解析广播消息失败:', error)
}
})
// 如果有会话ID,也订阅会话特定的消息
if (this.conversationId) {
this.client.subscribe(`/topic/conversation/${this.conversationId}`, (message) => {
try {
const wsMessage: WebSocketMessage = JSON.parse(message.body)
console.log('收到会话WebSocket消息:', wsMessage)
this.callbacks.onMessage?.(wsMessage)
} catch (error) {
console.error('解析会话WebSocket消息失败:', error)
}
})
}
}
/**