如何从互联网上的远程设备接收本地机器上的 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 个连接。
为了实现这个:-
- 我用一个简单的按钮创建了一个反应本机应用程序。
- 创建了节点 js 服务器,用于在我们收到任何 post 请求时让 pc 进入睡眠状态。 (这只适用于本地网络)
- 我用
ngrok
创建了一个隧道。 (现在,如果我 POST
在 URL 上发出请求,我的电脑就会进入睡眠状态)
- 并将
server.ts
文件安装为 pc 中的 windows 服务。所以每当我的电脑开始从睡眠中醒来时 server.ts 启动一个 HTTP 服务器并生成一个新的隧道 URL。然后将其保存到 firestore 数据库。
- 当我在 phone 中打开我的应用程序时,它从 firestore 获取隧道 URL,当按下按钮时,它会发送一个
POST
请求 URL PC 进入睡眠状态
如果您想自己构建它,这里是 URL:- Github repo
我正在开发一个应用程序来学习服务器端。我创建了一个节点 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 个连接。
为了实现这个:-
- 我用一个简单的按钮创建了一个反应本机应用程序。
- 创建了节点 js 服务器,用于在我们收到任何 post 请求时让 pc 进入睡眠状态。 (这只适用于本地网络)
- 我用
ngrok
创建了一个隧道。 (现在,如果我POST
在 URL 上发出请求,我的电脑就会进入睡眠状态) - 并将
server.ts
文件安装为 pc 中的 windows 服务。所以每当我的电脑开始从睡眠中醒来时 server.ts 启动一个 HTTP 服务器并生成一个新的隧道 URL。然后将其保存到 firestore 数据库。 - 当我在 phone 中打开我的应用程序时,它从 firestore 获取隧道 URL,当按下按钮时,它会发送一个
POST
请求 URL PC 进入睡眠状态
如果您想自己构建它,这里是 URL:- Github repo