我遵循了this关于Websockets的Spring Boot教程,实现了STOMP协议,该协议本身可以完美运行。我想将它连接到使用 Expo 的前端应用程序,所以我使用 STOMPjs
设置客户端并连接后,出现错误:
{"isTrusted": false, "message": "Failed to connect to localhost/127.0.0.1:8080"}
,因此我无法与后端建立连接。
我的后端与指南完全一样:
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws");
}
}
stompClient.ts
import { Client } from "@stomp/stompjs"
import 'text-encoding-polyfill';
export const stompClient = new Client({
brokerURL: "ws://localhost:8080/ws",
debug: (str) => {
console.log(str);
},
onConnect(frame) {
console.log("connected");
},
onStompError(error) {
console.log(`stompError: ${error}`);
},
onWebSocketError(error) {
console.log(error);
},
onDisconnect() {
console.log("DISCONNECT");
},
reconnectDelay: 5000,
heartbeatIncoming: 4000,
heartbeatOutgoing: 4000
})
stompClient.activate()
与我类似的三个开放 GitHub 问题中的两个尚未得到解答或更新 OP
这个有一个对我不起作用的响应(将
stompVersions
添加到客户端实例)
3. 无法在 React Native 中工作
必须将brokerUrl中的
localhost
更改为实际IP地址
export const stompClient = new Client({
brokerURL: "ws://YOUR_IP_ADDRESS:8080/ws",
...
})