Java WebSocket:如何在不编写客户端的情况下测试服务器 WebSocket 端点 [关闭]

Posted

技术标签:

【中文标题】Java WebSocket:如何在不编写客户端的情况下测试服务器 WebSocket 端点 [关闭]【英文标题】:Java WebSocket: How can I test a Server WebSocket endpoint without writing a client [closed] 【发布时间】:2019-09-21 05:15:20 【问题描述】:

我正在使用 Glassfish 服务器来托管使用 javax.websocket 的基本 Web Socket 服务器。

这是服务器代码:

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint("/websocket/server")
public class WebSocketServer 
    @OnOpen
    public void onOpen(Session session) 
        System.out.println(String.format("Connection Established::%s", session.getId()));
        RemoteEndpoint.Basic remoteEndpoint = session.getBasicRemote();
        session.addMessageHandler(new ServerMessageHandler(remoteEndpoint));
    

    @OnClose
    public void onClose(Session session) 
        System.out.println(String.format("Connection closed::%s", session.getId()));
    

    @OnError
    public void onError(Throwable t) 
        System.out.println(t.toString());
    

    @OnMessage
    public void onMessage(Session session, String message) 
        System.out.println(String.format("Received message::%s - sessionId::%s", message, session.getId()));
    

    private class ServerMessageHandler implements MessageHandler.Whole<String> 
        private RemoteEndpoint.Basic _remoteEndpoint;

        ServerMessageHandler(RemoteEndpoint.Basic remoteEndpoint) 
            this._remoteEndpoint = remoteEndpoint;
        
        public void onMessage(String message) 
            try 
                _remoteEndpoint.sendText(message);
             catch (IOException e) 
                e.printStackTrace();
            
        
    

这是运行服务器的控制台应用程序:

    import org.glassfish.tyrus.server.Server;

import javax.websocket.DeploymentException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main 
    public static void main(String[] args) 
        runServer();
    

    private static void runServer() 
        Server server = null;
        try 
            server = new Server("localhost", 8080, "/websocket", null, WebSocketServer.class);
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            server.start();
            System.out.println("Please press a key to stop the server.");
            reader.readLine();
         catch (IOException e) 
            throw new RuntimeException(e);
         catch (DeploymentException e) 
            throw new RuntimeException(e);
         finally 
            if (server != null) 
                server.stop();
            
        
    

我的问题是,当我运行此控制台应用程序并运行 Websocket 服务器时,我可以测试我的端点以验证它是否正常工作甚至调试到服务器代码(onOpen、onClose 等)的最佳方法是什么。我试图使用 Postman 访问 ws:\localhost:8080\websocket\server,但这不起作用。我对 Web Sockets 完全陌生,因此由于缺乏技术经验和知识,我的想法可能是错误的。

谢谢。

【问题讨论】:

【参考方案1】:

https://postwoman.io/ 也支持 websocket 连接,但是使用起来有点不方便,因为它甚至禁止从响应中复制

就个人而言,我使用带有自定义 URL 的 https://www.websocket.org/echo.html 页面,但如果您想要代码 sn-ps、请求前和请求后测试,我建议您编写自己的客户端

【讨论】:

【参考方案2】:

Postman 不支持,但WebSocket King 提供了一个类似的接口,专门为 Web 套接字设计。

【讨论】:

以上是关于Java WebSocket:如何在不编写客户端的情况下测试服务器 WebSocket 端点 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

来自客户端的 Java (Tomcat) websocket 参数

Java WebSocket 获取客户端的专有名称

纯 Java 中的 WebSocket

初识websocket及java服务端的简单实现

如何在WebSocket的服务器侧检测客户端的断开连接

websocket实战 信息处理发送接收和编码