当前位置: 首页 > 知识库问答 >
问题:

为什么 Vertx 服务器无法与通过 WSL 托管的节点服务器进行通信?(提供 MWE)

景俊良
2023-03-14

我的Vertx后端服务器无法通过WSL向同一台机器上运行的节点服务器(typescript)发送HTTP (GET)请求。然而,通过Postman,我能够向节点服务器发送HTTP (GET)请求。

我将提供一个最小的、可行的示例:

首先,localhost托管节点服务器,配置如下:

  "dependencies": {
    "@types/express": "^4.17.12",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "@types/node": "^15.14.0",
    "ts-node": "^9.1.1",
    "typescript": "^4.3.5"
  }

index.ts:

const express = require('express')
const app = express()
const port = 8081

app.get('/', (req, res) => {
    console.log("standard route called");
    res.send('Hello World!')
})

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
})

后端服务器是一个Vertx服务器(Vertx 4.0.2),它使用Vertx Web客户端向“localhost:8081/”发送HTTP GET-请求:

package org.example

import io.vertx.reactivex.core.Vertx
import io.vertx.reactivex.ext.web.Router
import io.vertx.reactivex.ext.web.client.WebClient

fun main(args: Array<String>) {

    val vertx = Vertx.vertx()
    val router = Router.router(vertx)

    val webClient = WebClient.create(vertx)

    webClient.get(8081, "localhost", "/").rxSend().subscribe { result ->
        println(result.statusMessage())
    }

    vertx.createHttpServer().requestHandler(router).listen(8080)


}

启动vertx服务器(并发送HTTP GET)时会发生以下错误:

原因:io.netty.channel。AbstractChannel$AnnotatedConnectionException:连接被拒绝:无进一步信息:localhost/127.0.0.1:8081由:java.net引起。ConnectException:连接被拒绝:sun.nio.ch.SocketChannelImpl没有进一步的信息。在io.netty.channel.socketChannel.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330)和io.netdy.channel.channels.NioEventLoop.processSelectedKey(NioEventLoop.java:702)上的io.nety.channel.ch.socketchannell.finishConnect(sockethannel.java:717)上的checkConnect(本机方法)io.netty.channel.nio.NioEventLoop.processSelectedKeys在io.Netdy.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:576)在io.netty.channel.nio.NioEventLoop.run(NioevenLoop.java:493)在io.netty.util.concurrent.SingleThreadEventExecutor$4.run在io.netty.uti.internal.ThreadExecutor$2.run(ThreadExecutorMap.java:74)位于io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)处,位于java.lang.Thread.run处(Thread.java:748)

需要注意的是,实际的节点服务器是通过WSL托管的,因为它使用的库只能在Linux中使用。当节点服务器通过Windows(本地主机)托管时,Vertx服务器具有访问权限。为什么Vertex服务器无法访问通过WSL托管的本地节点服务器?我需要做什么才能做到这一点?

共有1个答案

高夜洛
2023-03-14

原来您可以通过IPv6“::1”访问Windows本地承载的WSL服务。

 类似资料:
  • 下面的代码片段显示了如何在gRPC AspNet核心应用程序中启用gRPC web: 客户端应用程序的代码如下所示:

  • 我有两个AWS EC2实例。服务器和客户端节点JS应用程序。 在本地,我的代码运行良好。但是在AWS,客户端会在一段时间后(例如30秒)关闭,没有任何警告/异常(由于某种原因,它无法找到并连接到服务器) 两个AWS实例都在运行:Windows Server 2016 Base。 两个AWS实例都有自己的服务器“AWS安全组”。只是为了确保我没有阻止两个安全组当前允许的任何东西:“所有流量到任何IP

  • 我已经在亚马逊(AWS)机器上创建了一个linux节点。我可以 ssh 到节点,但我不能 ping 到它的 IPv4 公共 IP。我应该怎么做才能解决此问题? 作品: 不工作(返回0失败): 请注意,当我进行此设置时,我可以从另一个amazon节点ping到另一个amazon节点。但从非amazon节点,我仍然无法对amazon结点执行ping操作。 感谢您宝贵的时间和帮助。

  • Web主要围绕HTTP的请求/响应范例构建。客户端加载网页,然后在用户点击下一页之前没有任何操作。大约在2005年,AJAX开始让网络感觉更有活力。仍然,所有HTTP通信都由客户端引导,这需要用户交互或定期轮询以从服务器加载新数据。 使服务器能够在知道新数据可用的瞬间将数据发送到客户端的技术已存在很长时间了。它们的名称如“Push”或“Comet”。 将套接字引入Web Websocket规范定义

  • 问题内容: 我知道这并不是一件容易的事,但是很遗憾,自昨天以来我一直被困在这里并与之抗争。我遵循了Android互助身份验证教程,将密钥库放置在资源中并尝试通过SSL连接到我的服务器,但是得到以下异常 java.lang.RuntimeException:org.spongycastle.jcajce.provider.asymmetric.x509.CertificateFactory $ Ex

  • 本文向大家介绍Android通过Socket与服务器之间进行通信的示例,包括了Android通过Socket与服务器之间进行通信的示例的使用技巧和注意事项,需要的朋友参考一下 一、首先进行Server的编写: 二、对客户端的编写,主要用用AIDL进行Server和Client AIDL 的编写主要为以下三部分: 1、创建 AIDL 1)、创建要操作的实体类,实现 Parcelable 接口,以便序