如何从互联网上的远程设备接收本地机器上的 http 请求?

How to receive http request on my local machine from the remote device on the internet?

我正在开发一个应用程序来学习服务器端。我创建了一个节点 js 服务器和一个 android 应用程序。

WorkFlow⚙️(我想达到的目标):-

我的电脑本地IP:192.168.0.120

在我监听的端口上:8443

在本地主机上一切正常:当我发送 POST 请求时。在 192.168.0.120:8443 单击我的应用程序上的按钮时。

但这只有在我连接到我的 wifi 时才有效,而不是在连接到 SIM 网络或某个远程位置时。

所以我的问题是点击我的应用程序中的按钮可以将请求发送到哪里(肯定不能在 192.168.0.120:8443 上发送,因为我无法连接到 wifi)?

server.js 文件

    let http = require('http')
    
    let server = http.createServer(function (req, res) {
        if (req.method === 'POST') {
            console.log('sleeping..')
            var ffi = require('ffi-napi')
            var powrprof = ffi.Library('powrprof.dll', {
                SetSuspendState: ['int', ['int', 'int', 'int']],
            })
    
            function invokeStandby() {
                powrprof.SetSuspendState(0, 0, 0)
            }
            // invokeStandby()
        } else {
            res.writeHead(405, { 'Content-Type': 'text/plain' })
            res.end('Method Not Allowed\n')
        }
    })
    
    server.listen(8443)

    console.log('Server running on port 8443')

与其说是节点问题,不如说这是网络问题。您必须能够配置网关路由器/防火墙才能使其正常工作。此外,您的 ISP 必须允许您收听的端口上的入站连接。幸运的是,这可能不会成为问题,只是需要注意的事项。

首先,您需要将路由器配置为进行端口转发。端口转发会将连接转换到路由器上的特定端口,然后将该请求转发到本地网络上特定内部 IP 地址上的同一端口。如果您的路由器有防火墙,您可能还必须创建一个规则让该端口上的流量通过。大多数家用路由器不需要这样做。

网关路由器设置完成后,您需要找出路由器的外部 IP 地址。要查找外部 IP 地址,您可以访问 https://whatismyipaddress.com/ 等网站。将此 IP 地址连同端口提供给任何你想连接到你的服务器的人。

大多数 ISP 动态分配 IP 地址,因此您必须不时检查您的 IP 地址是否已更改。

完成所有设置并将端口转发到本地开发机器后,您可以启动节点服务器并开始查看请求。

请注意,将您的计算机暴露在互联网上存在一些风险。请确保您不信任服务器的输入,并在不需要时关闭端口转发。

如果您无法进行任何路由器配置,请查看 ngrok。这将通过几乎所有 NAT 路由器或防火墙。请注意,免费版本限制为每分钟 40 个连接。

为了实现这个:-

  1. 我用一个简单的按钮创建了一个反应本机应用程序。
  2. 创建了节点 js 服务器,用于在我们收到任何 post 请求时让 pc 进入睡眠状态。 (这只适用于本地网络)
  3. 我用 ngrok 创建了一个隧道。 (现在,如果我 POST 在 URL 上发出请求,我的电脑就会进入睡眠状态)
  4. 并将 server.ts 文件安装为 pc 中的 windows 服务。所以每当我的电脑开始从睡眠中醒来时 server.ts 启动一个 HTTP 服务器并生成一个新的隧道 URL。然后将其保存到 firestore 数据库。
  5. 当我在 phone 中打开我的应用程序时,它从 firestore 获取隧道 URL,当按下按钮时,它会发送一个 POST 请求 URL PC 进入睡眠状态

如果您想自己构建它,这里是 URL:- Github repo