You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现Socket.IO v2聊天测试:连接与消息发送问题求助

Java实现Socket.IO v2聊天测试用例的问题修正

背景信息

正在使用Postman测试基于Socket.IO v2的聊天功能,需要用Java实现对应的聊天测试用例,Postman请求信息如下:

  • Socket服务器地址:https://hc-socketio-example.xyz
  • 请求头:
    • authorization: xxx
    • source: app
  • 发送的JSON消息格式:
{
  "ticketId": "63bcc910c22293b4b0495fe4",
  "content": "test ",
  "type": "text"
}

用户现有Java代码:

URI uri = URI.create("https://hc-socket.unibag.xyz");
// @formatter:off
IO.Options options = IO.Options.builder().build();

// @formatter:on
Socket socket = IO.socket(uri, options);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        System.out.println("Connected to server...");
    }
});
socket.connect();

遇到的问题:

  1. 未打印"Connected to server...",疑似连接失败
  2. 不知道如何设置authorization和source请求头
  3. 不确定如何发送指定格式的JSON消息

修正后的完整代码

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import org.json.JSONObject;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;

public class SocketIOChatTest {
    public static void main(String[] args) {
        try {
            // 统一服务器地址,与Postman配置保持一致
            URI uri = URI.create("https://hc-socketio-example.xyz");
            
            // 构建自定义请求头
            Map<String, String> headers = new HashMap<>();
            headers.put("authorization", "xxx");
            headers.put("source", "app");
            
            // 配置Socket.IO v2兼容选项
            IO.Options options = IO.Options.builder()
                    .setExtraHeaders(headers)
                    .setForceNew(true)
                    .setReconnection(false)
                    // 指定v2版本兼容的传输方式
                    .setTransports(new String[]{"websocket", "polling"})
                    .build();
            
            Socket socket = IO.socket(uri, options);
            
            // 监听连接成功事件
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    System.out.println("Connected to server...");
                    
                    // 构建并发送指定格式的JSON消息
                    JSONObject message = new JSONObject();
                    message.put("ticketId", "63bcc910c22293b4b0495fe4");
                    message.put("content", "test ");
                    message.put("type", "text");
                    
                    // 替换为服务器实际接收消息的事件名(例如"send_message")
                    socket.emit("send_message", message);
                    System.out.println("Message sent: " + message.toString());
                }
            });
            
            // 监听连接错误,排查问题
            socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    System.out.println("Connect error: " + args[0]);
                }
            });
            
            // 监听断开连接事件
            socket.on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    System.out.println("Disconnected from server...");
                }
            });
            
            socket.connect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

问题解决说明

1. 连接失败问题

  • 统一服务器地址:原代码中服务器地址与Postman配置不一致,这是连接失败的核心原因之一,先修正为一致地址。
  • 添加错误监听:通过EVENT_CONNECT_ERROR可以直接打印连接错误信息,快速定位问题(如地址错误、版本不兼容、权限问题)。
  • 指定v2兼容传输方式:Socket.IO v2默认传输方式可能与服务器不匹配,显式设置websocket和polling保证兼容性。
  • 配置连接参数:setForceNew(true)避免复用旧连接,setReconnection(false)关闭自动重连,方便单次测试排查。

2. 设置请求头

通过IO.Options.builder().setExtraHeaders(headers)传入自定义请求头,其中headers为Map<String, String>类型,直接放入authorization和source的键值对即可。

3. 发送指定JSON消息

  • 使用org.json.JSONObject构建符合格式的消息对象(需引入依赖,如Maven的org.json:json:20230618)。
  • 在EVENT_CONNECT回调中调用socket.emit(事件名, 消息对象)发送消息,注意替换事件名为服务器实际接收的事件名(可通过Postman抓包或接口文档确认)。

内容的提问来源于stack exchange,提问作者SL Thang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:32:27