【问题标题】:Using chronicle network library,使用编年史网络库,
【发布时间】:2020-12-03 23:26:55
【问题描述】:

您好,我正在尝试使用低级库编年史线发送 http 请求。我能够通过使用 java 套接字来完成这项工作,但我对使用这个 lib 的差异感到好奇。 下面是调用代码:

private static void call() throws IOException, TimeoutException {
        final String desc = "google.com";
        TCPRegistry.createServerSocketChannelFor(desc);

        EventLoop eg = new EventGroup(true);
        eg.start();
        TcpChannelHub tcpChannelHub = new TcpChannelHub(null, eg, WireType.TEXT, "",
                SocketAddressSupplier.uri(desc), false, null, HandlerPriority.HIGH, new FatalFailureConnectionStrategy(0, false));
        final long tid = tcpChannelHub.nextUniqueTransaction(System.currentTimeMillis());

        final Wire wire = new TextWire(Bytes.elasticByteBuffer());

        wire.writeDocument(true, w -> w.write("tid").int64(tid));
        wire.write("GET / HTTP/1.1\\r\\n");
        wire.write("Host google.com\\r\\n");
        tcpChannelHub.writeSocket(wire, false, false);
        tcpChannelHub.proxyReply(TimeUnit.SECONDS.toMillis(1), tid);
    }

我收到以下错误:

20:26:43.275 [main/TcpChannelHub-Reads--(none)] DEBUG net.openhft.chronicle.network.connection.TcpChannelHub - connected to remoteAddress=(none)
20:26:43.279 [main] DEBUG net.openhft.chronicle.network.connection.TcpChannelHub - tid=1606937203253 of client request
20:26:44.279 [main] WARN net.openhft.chronicle.network.connection.TcpChannelHub - 
java.util.concurrent.TimeoutException: timeoutTimeMs=1000
    at net.openhft.chronicle.network.connection.TcpChannelHub$TcpSocketConsumer.syncBlockingReadSocket(TcpChannelHub.java:1210)
    at net.openhft.chronicle.network.connection.TcpChannelHub.proxyReply(TcpChannelHub.java:685)
    at com.example.demo.DemoApplication.call(DemoApplication.java:115)
    at com.example.demo.DemoApplication.main(DemoApplication.java:31)
20:26:44.280 [main] DEBUG net.openhft.chronicle.network.connection.TcpChannelHub - closing
net.openhft.chronicle.core.StackTrace: only added for logging - please ignore ! on main
    at net.openhft.chronicle.network.connection.TcpChannelHub.closeSocket(TcpChannelHub.java:502)
    at net.openhft.chronicle.network.connection.TcpChannelHub.proxyReply(TcpChannelHub.java:693)
    at com.example.demo.DemoApplication.call(DemoApplication.java:115)
    at com.example.demo.DemoApplication.main(DemoApplication.java:31)
20:26:44.281 [main] DEBUG net.openhft.chronicle.network.connection.TcpChannelHub - disconnected to remoteAddress=(none)

Exception in thread "main" java.util.concurrent.TimeoutException: timeoutTimeMs=1000

1000ms 应该足够了,所以问题出在配置的某个地方。

【问题讨论】:

    标签: chronicle hft


    【解决方案1】:

    虽然我确信你可以让它工作,但它不是与 HTTP 一起使用的自然选择。

    但是,如果这只是一个练习,您应该避免使用writingDocument ,因为这会在 HTTP 不期望的内容之前添加一个 32 位长度。

    createServerSocketChannelFor 方法用于生成一个虚拟服务器以进行测试,因此它会阻止您联系您心目中的服务器。

    我建议您使用专为 HTTP 设计的库,例如 Java 内置的库。

    【讨论】:

    • 感谢您的回答。我只是好奇这是如何工作的。问题还在于服务器正在使用 TLS,所以我也必须处理它。设法使用来自 java.net 的套接字来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多