痞子374 2024-04-28 16:11 采纳率: 90.2%
浏览 24

测试websocket报404咋回事

img

img


如图,测试websocket的时候报了404,但其他的接口没一点问题,都是可以通的,只有这个接口报404

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-28 16:11
    关注

    引自免费微信小程序:皆我百晓生

    看起来您在尝试测试一个基于Java的WebSocket服务器,但是遇到了404错误。这个问题通常是由于Web应用程序服务器找不到处理特定URL的资源。根据您的代码片段,问题可能出在以下几个方面:

    1. 确保Spring Boot应用正确地扫描到了WebSocketServer类。确保@Component注解被正确地添加,并且Spring Boot应用启用了WebSocket支持。

    2. 检查部署的应用程序上下文路径是否正确。默认情况下,Spring Boot应用的根路径是"/",这意味着所有没有明确指定其他上下文路径的控制器或端点都将从这里开始。如果您更改了应用程序的上下文路径,您需要相应地调整WebSocket URL。

    3. 您提供的测试请求是一个HTTP GET请求,而WebSocket通常使用ws://(非加密)或wss://(加密)协议进行连接。对于WebSocket连接,您应该使用WebSocket握手方法(例如使用WebSocket客户端库),而不是普通的HTTP请求。

    为了帮助您解决这个问题,我将提供一个简化版的WebSocketServer示例,并给出一个简单的测试方法。首先,确保您的pom.xml文件包含以下依赖项:

    <dependencies>
        <!-- Spring Websocket -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
    </dependencies>
    

    然后更新WebSocketServer类,去掉@Component注解(因为它不需要,因为我们不会通过Spring容器管理WebSocket实例):

    import java.util.concurrent.ConcurrentHashMap;
    import javax.websocket.OnClose;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    
    @ServerEndpoint("/wsserver/{userId}")
    public class WebSocketServer {
    
        private static int onlineCount = 0;
        private static ConcurrentHashMap<String, WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
    
        @OnOpen
        public void onOpen(Session session, String userId) {
            // 在此处增加逻辑,比如增加在线计数、将session加入到webSocketMap等
        }
    
        @OnMessage
        public String onMessage(String message, Session session) {
            // 处理接收到的消息
            return "Echo: " + message;
        }
    
        @OnClose
        public void onClose(Session session) {
            // 在此处减少在线计数、从webSocketMap移除session等
        }
    }
    

    接下来,使用WebSocket客户端工具或库(如JavaScript的WebSocket API、Python的websocket-client库等)来连接到WebSocket服务器。例如,您可以使用JavaScript创建一个WebSocket连接:

    var socket = new WebSocket('ws://localhost:8080/wsserver/your_user_id_here');
    
    socket.onopen = function(event) {
        console.log('Connected to WebSocket server');
    };
    
    socket.onmessage = function(event) {
        console.log('Received:', event.data);
    };
    
    socket.onclose = function(event) {
        console.log('Disconnected from WebSocket server');
    };
    

    请确保您的Spring Boot应用正在运行并且监听正确的端口(默认为8080)。执行上述JavaScript代码后,您应该能看到连接成功并能接收消息。

    如果仍然遇到问题,请检查您的防火墙设置,确保允许相应的网络通信端口,并确认没有其他软件冲突。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月28日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22