【问题标题】:How do I launch clients on different event loops?如何在不同的事件循环上启动客户端?
【发布时间】:2019-06-04 22:30:49
【问题描述】:

我正在创建一个测试应用程序,它假设与服务器有许多连接。当我从我的 Verticle 创建客户端时,它总是在同一个步骤上处理连接和消息。

当我创建我的verticle时,我设置了

options.setEventLoopPoolSize(4)

所以我希望它循环到 4 个事件循环,因为我希望拥有数百万个连接。

我在做

        launch {
            val socket = netClient.connectAwait(port, host)
            log.info().log("connected on - {} {}", Thread.currentThread(), Vertx.currentContext())
            socket.handler {
                log.info().log("{}", it)
            }
        }

2019-06-04 17:30:06,479 INFO [vert.x-eventloop-thread-0] MainVerticle:连接到 - Thread[vert.x-eventloop-thread-0,5,main] io.vertx。 core.impl.EventLoopContext@150049b3

总是在同一个线程上......如何在不同的事件循环上启动连接

【问题讨论】:

    标签: kotlin vert.x vertx-verticle vertxoptions


    【解决方案1】:

    首先,从单个主机创建多个连接是错误的。很可能在服务器超载之前很久就会遇到客户端计算机的瓶颈。

    其次,创建自己的负载测试工具是错误的。已经有很好的工具可用,比如wrk,它解决了你会遇到的许多问题。

    现在,手头的问题。连接在事件循环的不同线程上启动。您可以看到它运行以下代码:

    private const val port = 8443
    
    fun main() {
        val counter = AtomicLong(0)
        val vertx = Vertx.vertx()
        val client = vertx.createNetClient()
        var timestamp = System.currentTimeMillis()
        vertx.createNetServer().connectHandler { ctx ->
            counter.getAndIncrement()
            if (System.currentTimeMillis() - timestamp > 1000) {
                println(counter.get())
                counter.set(0)
                timestamp = System.currentTimeMillis()
            }
            ctx.end()
        }.listen(port)
    
        println("Server started")
    
        ddos(client)
    }
    
    fun ddos(client: NetClient) {
        for (i in 0..999999) {
            client.connect(port, "localhost") {
                println(Thread.currentThread().name)
            }
        }
    }
    

    请注意,您还将获得更多线程:

    vert.x-eventloop-thread-14
    vert.x-eventloop-thread-12
    vert.x-eventloop-thread-10
    vert.x-eventloop-thread-14
    vert.x-eventloop-thread-14
    vert.x-eventloop-thread-10
    

    另请注意,您实际上并不需要为此使用协程。

    【讨论】:

    • 谢谢,我得到了它的工作,我认为我遇到的问题是我已经在一个垂直上下文中,而在你的例子中你不在一个垂直范围内
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-05-11
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多