java版sockJs压测程序

package com.example.demo.config;


import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport;
import org.springframework.web.socket.sockjs.client.SockJsClient;
import org.springframework.web.socket.sockjs.client.Transport;

import java.util.ArrayList;
import java.util.List;

public class Test {
    static int j = 1000;
    public static void main(String[] args) throws Exception{
        for (int i = 0; i < 30; i++) {
            new Thread(new Inc()).start();
            //Thread.sleep(1000);
        }
    }
    static synchronized void inc() throws Exception{
        System.out.println(Thread.currentThread().getName() + ": " + j++);
        List<Transport> transports = new ArrayList<>(1);
        transports.add(new RestTemplateXhrTransport());
        SockJsClient sockJsClient = new SockJsClient(transports);
        ListenableFuture<WebSocketSession> wsSession = sockJsClient.doHandshake(new MyHandler(), "ws://ip:端口/sockjs/box/register?param="+j);
        //Thread.sleep(1000);
    }
   static class Inc implements Runnable {
        public void run() {
            for (int i = 0; i < 1000; i++) {
                try{
                    inc();
                } catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

}





package com.example.demo.config;

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

public class MyHandler implements WebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
        log.info("connection is established!");
    }

    @Override
    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {

    }

    @Override
    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {

    }

    @Override
    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {

    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}

注意事项:
1、需要将服务端程序所在服务器文件数调大,例如掉大到600000,可用命令ulimit -n 600000
2、 需要用到的依赖

<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SockJS API 是一个 JavaScript 库,用于在客户端和服务器之间建立实时双向通信。它提供了一组简单易用的接口,以便开发者能够在浏览器中创建SockJS连接,发送和接收消息。 SockJS API 是为了克服WebSocket在某些浏览器中的兼容性问题而创建的。它使用类似于WebSocket的技术,但在不支持WebSocket的浏览器中,SockJS会降级到使用长轮询、XHR Streaming和IFrame等技术来实现实时通信。 使用SockJS API非常简单。首先,我们需要在客户端引入SockJS库,然后创建一个SockJS连接对象。通过传入服务器的URL,我们可以与服务器建立连接。一旦连接建立,我们就可以注册事件监听器来处理不同的SockJS事件,比如连接建立、连接断开、消息接收等。我们可以使用send()方法向服务器发送消息,使用close()方法关闭连接。 SockJS可以与不同的服务器端实现集成,比如Java、Node.js等。服务器端需要提供一个SockJS服务,用于处理和管理与客户端的连接。服务器端实现需要根据SockJS协议来处理不同的请求和响应。 SockJS API的优点是它提供了一种统一的接口,无论是WebSocket还是其他长轮询技术,开发者可以使用相同的API来实现实时通信。它也解决了WebSocket在某些浏览器中的兼容性问题,使得开发者可以更方便地使用实时通信功能。 总之,SockJS API是一个用于在客户端和服务器之间建立实时双向通信的JavaScript库。它提供了一组简单易用的接口,使得开发者可以方便地实现实时通信功能。无论是WebSocket还是其他支持的技术,SockJS都能提供统一的接口来实现跨浏览器的实时通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值