如何从Node.js发出networking请求时指定networking接口?

http.requestnet.connect ,是否有一个选项可以指定一个networking接口来启动连接?

编辑:操作系统级别AFAIK我可以指定地址级别,或负载平衡到路由表。 但是在我的软件中select接口的方式不止这些,我想知道我是否可以在代码中做到这一点。

节点有这个内置的:

http://nodejs.org/api/net.html#net_net_connect_options_connectionlistener

http://nodejs.org/api/http.html#http_http_request_options_callback

请参阅localAddress ,只需将其设置为您要使用的界面的IP即可。

编辑 :正如mak指出的那样,从用户进程中指定一个networking接口确实是可能的。 我纠正了。 但是,我还没有find一个模块,允许它与节点。

默认情况下,networking接口由OS路由表决定。

你可以在Unix系统上用netstat -r列出这个表(包括OSX)。 只要打开一个terminal并input命令。 你会得到一个像这样的列表:

 laurent ~ $ netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.1.1 UGSc 153 0 en0 127 localhost UCS 0 0 lo0 localhost localhost UH 2 42 lo0 ... 

Netif字段为您提供用于路由的networking接口。 您也可以通过route获取用于达到主机名的接口:

 laurent ~ $ route get google.fr route to: par03s02-in-f23.1e100.net destination: default mask: default gateway: 192.168.1.1 interface: en0 flags: <UP,GATEWAY,DONE,STATIC,PRCLONING> recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire 0 0 0 0 0 0 1500 0 

这更像是一个服务器故障,但可以使用route命令更改路由。 例如,这将在eth0上将stream量路由到XYZ [0-254]到XYZ254:

 route add -net XYZ0/24 gw XYZ254 dev eth0 

如果您希望路由保持重新启动,您可以将它们添加到/etc/network/interfaces 。 如果要在多个不同的路由之间进行负载均衡,还应该检查MPLS 。

您可以使用node cURL wrapper

 curl = require('node-curl') curl('www.google.com', { INTERFACE: 'eth1', RAW: 1 }, function(err) { console.info(this); });