- 32
- 0
后端使用 SpringBoot 集成的 WebSocket 服务
Java 代码如下:
配置 WebSocket
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/endpointSang").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
}
}
WebSocket 控制器
@Controller
public class WsController {
@MessageMapping("/welcome")
@SendTo("/topic/getResponse")
public ResponseMessage say(RequestMessage message) {
System.out.println(message.getName());
return new ResponseMessage("welcome," + message.getName() + " !");
}
}
现在前端进行连接时会抛出异常
var ctx = 'ws://localhost:8080'
// 创建一个 Scoket 端点连接
var socket = new SockJS(`${ctx}/endpointSang`)
var stompClient = Stomp.over(socket)
// 链接到端点
stompClient.connect({}, frame => {
console.log('连接到:', frame)
stompClient.subscribe(`${ctx}/topic/getResponse`, response => {
console.log('订阅的主题发送了消息:', JSON.parse(response.body).responseMessage)
})
})
// 通过端点客户端发送一个消息到服务器
stompClient.send(`${ctx}/welcome`, {}, JSON.stringify({ name: 'rx' }))
// 抛出的异常
main.js:73 Uncaught SyntaxError: The URL's scheme must be either 'http:' or 'https:'. 'ws:' is not allowed.
at new SockJS (main.js:73)
at simple-websocket.html:17
但如果是在后端项目下的话就可以使用下面的代码进行调用
// 这里是空的,不需要指定前缀
var ctx = ''
// 创建一个 Scoket 端点连接
var socket = new SockJS(`${ctx}/endpointSang`)
var stompClient = Stomp.over(socket)
// 链接到端点
stompClient.connect({}, frame => {
console.log('连接到:', frame)
stompClient.subscribe(`${ctx}/topic/getResponse`, response => {
console.log('订阅的主题发送了消息:', JSON.parse(response.body).responseMessage)
})
})
// 通过端点客户端发送一个消息到服务器
stompClient.send(`${ctx}/welcome`, {}, JSON.stringify({ name: 'rx' }))
所以,发生了什么?吾辈应该怎么做呢?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
苦瓜其实很甜 普通会员 1楼
在SpringBoot中,你已经创建了一个WebSocket服务器,你可以通过HTTP POST或者WebSocket的ping命令来与服务器通信。以下是简单的示例:
- 使用HTTP POST:
```java @Controller public class WebSocketController { @Autowired private WebSocketServer wsServer;
@PostMapping("/ping") public String ping(@RequestBody String message) { return "Pong!"; }} ```
- 使用WebSocket的ping命令:
```java @Controller public class WebSocketController { @Autowired private WebSocketServer wsServer;
@GetMapping("/ping") public String pingWebSocket() { wsServer.start(); return "Pong!"; }} ```
在这个示例中,前端可以通过访问
/ping路径,然后发送一个HTTP POST请求到/ping路径,然后在服务器端接收这个请求,并返回一个响应。前端可以通过这个响应来确认WebSocket连接是否建立成功。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

