android - 带 header 的 Socket.IO-client Java

标签 android websocket socket.io-java-client

我有需要用户 ID 才能连接的套接字服务器。因此,我需要将 extraHeader 设置为连接构造函数。我尝试了以下代码,但没有运气。请帮我解决这个问题,谢谢。

向连接构造函数添加额外 header 'x-user-id': userId

private Socket mSocket;
{
    try {
        IO.Options opts = new IO.Options();
        mSocket = IO.socket(socket_url, opts);
        mSocket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
            @Override
            public void call(Object... args) {

                Transport transport = (Transport)args[0];
                transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                        @SuppressWarnings("unchecked")
                        Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
                        // modify request headers
                        headers.put("x-user-id", Arrays.asList("5B59F68B7B7811E88C3E52964BF487E4"));
                    }
                }).on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
                    @Override
                    public void call(Object... args) {
                    }
                });
            }
        });

    } catch (URISyntaxException e) {}
}

这是我的有效代码。

private init(){
        self.socketManager = SocketManager(socketURL: URL(string:"\(MAIN_URL)/message")!, config: [.log(true),.extraHeaders(["x-user-id":AppManager.instance.userId])])
        self.socket = socketManager?.defaultSocket
    }

最佳答案

您还可以使用Spring框架提供的stomp客户端。 要编译并运行以下方法,您应该将“spring-messaging”和“spring-websocket”maven 依赖项添加到您的项目中。

public ListenableFuture<StompSession> connect() {
    List<Transport> transports = new ArrayList<>(2);
    transports.add(new WebSocketTransport(new StandardWebSocketClient()));
    transports.add(new RestTemplateXhrTransport());

    SockJsClient sockJsClient = new SockJsClient(transports);
    sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());

    WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());

    WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
    headers.add("x-user-id", "5B59F68B7B7811E88C3E52964BF487E4");

    return stompClient.connect(socket_url, headers, new StompSessionHandlerAdapter() {});
}

关于android - 带 header 的 Socket.IO-client Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51120178/

相关文章:

Android:如何以正确的方式使用 Gottox/socket.io-java-client 库?

android - 在android中屏幕关闭时无法保持套接字连接

安卓教程 'HelloTabWidget'

Android Inflate 布局在 TableRow 中使用

android - 如何在所有移动浏览器上正确显示网页

html - html5在线音视频 session 系统

javascript - 如何使用动态 data-websockets 运行 AngularJS 服务

android - socket.io Android 库认证

android - 有没有快速的方法来切换 Android 模拟器中的黑暗模式?

java - 将 Java Websocket 端点连接到 mySQL