0

是否可以像在 http 服务器上一样在 udp 服务器上设置不同的路由?

我想实现一个简单的nodejs服务器来像这样在php中调用它。

"udp://" . $host  . "/api/" . $apiVersion . "/myEndpoint";

试过这个

var PORT = 1337;
var HOST = '127.0.0.1/api/v1/somethig';

var dgram = require('dgram');
var server = dgram.createSocket('udp4');

server.on('listening', function() {
  var address = server.address();
 console.log('UDP Server listening on ' + address.address + ':' + address.port);
});

server.on('message', function(message, remote) {
 console.log(remote.address + ':' + remote.port +' - ' + message);
});

server.bind(PORT, HOST);

使用 HOST 中的路线,我得到了以下错误。

events.js:187
      throw er; // Unhandled 'error' event
      ^

Error: getaddrinfo ENOTFOUND 127.0.0.1/api/v1/somethig
←[90m    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26)←[39m
Emitted 'error' event on Socket instance at:
←[90m    at GetAddrInfoReqWrap.callback (dgram.js:289:12)←[39m
←[90m    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:17)←[39m {
  errno: ←[32m'ENOTFOUND'←[39m,
  code: ←[32m'ENOTFOUND'←[39m,
  syscall: ←[32m'getaddrinfo'←[39m,
  hostname: ←[32m'127.0.0.1/api/v1/somethig'←[39m
}
4

1 回答 1

0

在 HTTP 中,您的 URL 的“路径”部分会在第一行发送到您的服务器。

虽然该udp:方案似乎有效(尽管我没有找到任何详细说明它的官方文件),但我认为“路径”部分与客户发送给您的任何内容之间没有映射关系。

从广义上讲,如果您(或某人)使用该udp:方案,则没有达成一致或标准来记录如何处理此问题,因此我怀疑您是否会以任何方式将该部分提交给您。

每个协议/方案都必须明确定义如何处理 URI 的许多段。原始 UDP 或 TCP 套接字在您明确告知之前不会真正发送任何类型的数据。同样,您也不会知道服务器端使用什么主机连接到您,而对于 HTTP,期望这是在Host标头中。

于 2021-06-10T16:18:20.350 回答