本篇文章给大家谈谈route---设置Linux内核中的网络路由表,以及linux路由配置route的知识点,同时本文还将给你拓展AddandDeleteanIP-RouteinLinux、Angul
本篇文章给大家谈谈route--- 设置 Linux 内核中的网络路由表,以及linux 路由配置route的知识点,同时本文还将给你拓展Add and Delete an IP-Route in Linux、Angular 2:类型’Route []’的参数不能分配给’Route []’类型的参数.、dubbo 中 registry、route、directory、cluster、loadbalance、route 的关系以及一个引用操作和调用操作到底干了啥、index.php?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10 is not defined at HTMLInputElement.onclick(index.php?route=checkout/checkout:1)等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- route--- 设置 Linux 内核中的网络路由表(linux 路由配置route)
- Add and Delete an IP-Route in Linux
- Angular 2:类型’Route []’的参数不能分配给’Route []’类型的参数.
- dubbo 中 registry、route、directory、cluster、loadbalance、route 的关系以及一个引用操作和调用操作到底干了啥
- index.php?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10 is not defined at HTMLInputElement.onclick(index.php?route=checkout/checkout:1)
route--- 设置 Linux 内核中的网络路由表(linux 路由配置route)
route 命令用来显示并设置 Linux 内核中的网络路由表,route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
在 Linux 系统中设置路由通常是为了解决以下问题:该 Linux 系统在一个局域网中,局域网中有一个网关,能够让机器访问 Internet,那么就需要将这台机器的 ip 地址设置为 Linux 机器的默认路由。要注意的是,直接在命令行下执行 route 命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在 /etc/rc.local
中添加 route 命令来保证该路由设置永久有效。
语法
route(选项)(参数)
选项
-A:设置地址类型;
-C:打印将Linux核心的路由缓存;
-v:详细信息模式;
-n:不执行DNS反向查找,直接显示数字形式的IP地址;
-e:netstat格式显示路由表;
-net:到一个网络的路由表;
-host:到一个主机的路由表。
参数
Add:增加指定的路由记录;
Del:删除指定的路由记录;
Target:目的网络或目的主机;
gw:设置默认网关;
mss:设置TCP的最大区块长度(MSS),单位MB;
window:指定通过路由表的TCP连接的TCP窗口大小;
dev:路由记录所表示的网络接口。
实例
route add -net 10.0.1.0/24 gw 10.0.0.11 增加到另以网络的路由
显示当前路由:
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0 * 255.255.252.0 U 0 0 0 eth1
10.160.0.0 * 255.255.240.0 U 0 0 0 eth0
192.168.0.0 10.160.15.247 255.255.0.0 UG 0 0 0 eth0
172.16.0.0 10.160.15.247 255.240.0.0 UG 0 0 0 eth0
10.0.0.0 10.160.15.247 255.0.0.0 UG 0 0 0 eth0
default 112.124.15.247 0.0.0.0 UG 0 0 0 eth1
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1
10.160.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
192.168.0.0 10.160.15.247 255.255.0.0 UG 0 0 0 eth0
172.16.0.0 10.160.15.247 255.240.0.0 UG 0 0 0 eth0
10.0.0.0 10.160.15.247 255.0.0.0 UG 0 0 0 eth0
0.0.0.0 112.124.15.247 0.0.0.0 UG 0 0 0 eth1
其中 Flags 为路由标志,标记当前网络节点的状态,Flags 标志说明:
- U Up 表示此路由当前为启动状态。
- H Host,表示此网关为一主机。
- G Gateway,表示此网关为一路由器。
- R Reinstate Route,使用动态路由重新初始化的路由。
- D Dynamically, 此路由是动态性地写入。
- M Modified,此路由是由路由守护程序或导向器动态修改。
- ! 表示此路由当前为关闭状态。
添加网关 / 设置网关:
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 #增加一条到达244.0.0.0的路由。
屏蔽一条路由:
route add -net 224.0.0.0 netmask 240.0.0.0 reject #增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝。
删除路由记录:
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
删除和添加设置默认网关:
route del default gw 192.168.120.240
route add default gw 192.168.120.240
route add -net 10.0.1.0/24 gw 10.0.0.11
Add and Delete an IP-Route in Linux
Add a route:
sudo route add -net 192.168.2.0 gw 192.168.1.1 netmask 255.255.255.0 dev eth1
Delete a route:
sudo route del -net 192.168.2.0 gw 192.168.1.1 netmask 255.255.255.0 dev eth1
Angular 2:类型’Route []’的参数不能分配给’Route []’类型的参数.
请注意,我打算升级到nativescript-angular的最后一个版本是使用RouterExtensions.
Argument of type 'Route[]' is not assignable to parameter of type 'Route[]'. Type 'Route' is not assignable to type 'Route'. Types of property 'pathMatch' are incompatible. Type 'string' is not assignable to type '"full" | "prefix"'. Type 'string' is not assignable to type '"prefix"'. const routes: Route[]
这些是我的package.json依赖项:
"dependencies": { "@angular/common": "2.0.0-rc.4","@angular/compiler": "2.0.0-rc.4","@angular/core": "2.0.0-rc.4","@angular/forms": "0.3.0","@angular/http": "2.0.0-rc.4","@angular/platform-browser": "2.0.0-rc.4","@angular/platform-browser-dynamic": "2.0.0-rc.4","@angular/platform-server": "2.0.0-rc.4","@angular/router": "^3.0.0-rc.1","@angular/router-deprecated": "2.0.0-rc.2","@angular/upgrade": "2.0.0-rc.4","nativescript-angular": "^0.3.1","nativescript-plugin-firebase": "^3.5.3","reflect-Metadata": "^0.1.8","rxjs": "5.0.0-beta.6","tns-core-modules": "^2.3.0-2016-08-29-3966","zone.js": "^0.6.17" },
app.routes.ts:
import { RouterConfig } from '@angular/router'; import { nsprovideRouter} from 'nativescript-angular/router'; import { LoginComponent } from './components/login.component'; import { DashboardComponent } from './components/dashboard.component'; const routes: RouterConfig = [ { path: '',redirectTo: '/login',terminal: true },{ path: 'login',component: LoginComponent },{ path: 'dashboard',component: DashboardComponent } ]; export const APP_ROUTER_PROVIDERS = [ nsprovideRouter(routes,{ enableTracing: false }) ];
解决方法
const routes: Routes = [ // <== { path: '',component: DashboardComponent } ];
dubbo 中 registry、route、directory、cluster、loadbalance、route 的关系以及一个引用操作和调用操作到底干了啥
zk 是比较典型场景,所以注册中心都是以 zk 作为例子的
1 对于 registry,提供者没有这个,消费者才有。为什么?
因为只有消费者才需要去注册中心拿到 provide 的信息,而 provider 是不需要关注的,provider 只需要去注册就好。在 RegistryProtocol 的 export 方法中,可以看到在 registry 方法里面直接在注册中心写信息就够了。
2 RegistryDirectory 是啥意思?如果有三个 zk,有几个 directory?几个 registry?
一个目录其实就是很容易想到就是一个 dubbo 提供者的 interfacename 在 zk 上面的 /duboo+interfacename 的目录,但不仅仅是这样,如果有多个 zk,那么有三个目录,因为这三个目录在不同的 zk 上面。
一个消费者在初始化得到引用的时候,在 loadRegistries 里面,如果 url 里面有多个以分号隔开的注册中心的 ip+port,那么就得到多个注册中心的 url,那么每个 url 都需要经过 registryProcol 处理,具体来说 createProxy 里面就是要对每个注册 url 进行 refer 操作
所以 directory 的构造函数里面有两个东西来限定唯一性:注册中心 url 和 provider 的 interfacename。对于一个消费者,假设只有一个 provider 的 interfacename 需要引用的话,在三个 zk 的前提下,那么要维护三个 registry,三个 registry 都各自有自己的 directory。消费者初始化引用的时候每个 directory 和对应的 registry 都需要一个方面跟提供者一样,去不同的 zk 上面的 consumer 写入自己的信息,另外要分别订阅这个 interfaceface 路径下的 provider、configure、route 信息。第一次订阅的时候,顺便把 provider 的具体信息都存在 directory 的 methodInvokerMap 中,以后要调用的时候就从这里取。
3 dubbo 里面经常说的 FailoverClusterinvoer、BroadcastClusterInvoker 等等这些 Cluster 是啥意思?
首先 cluster 接口只有一个方法,就是通过 join 得到一个 invoker,不要被名字误导了,虽然叫 cluster,其实没有保存多个 invoker,并不是保存了一个集合。虽然叫 join,但是其实是利用 spi 根据配置得到不同的 cluster,可以理解成:cluster 的 join 就是根据配置得到不同 ClusterInvoker 实现。当然还有一个 MockClusterWrapper,所以所有的 Cluster 其实都被这个 Wrapper 都包了一层,这个是 dubbo 的 spi 注入做的,看名字就知道加这一层是为了提前拦截,方便 mock 测试用的。
4 Cluster 和 loadbalance 的关系
不同的 Cluster 的实现里面都有一个 doInvoke 方法,dubbo 提供者被调用的时候都会走这个方法,因为 cluster 本质也是一个 invoker,不同的 Cluster 具有不同的 doInvoke 实现,在遇到多个 invoker 调用不顺利情况下 做不同处理。
而 loadbalance 不同,他是用来挑选优先使用哪个 invoker 的,一般有随机、一致性哈希,这个也是 spi 来挑选的。在 cluster 的共同的父类实现中,也就是在 doinvoke 之前,都会调用一次 loadbalance 的 select 来选出优先的 invoker
5 dubbo 与 zk 的关系咋样的,dubbo 怎么被 zk 通知的?
我们说过 provider 是不需要监听的,消费者才要。我感觉 dubbo 的 zklistener 太绕了,dubbox 稍微好点。消费者在两个地方进行监听:与 zk 连接的 statechanged 回调以及自己引用的 interface 目录的 provider、configure、route 目录发生变化的时候,也会有 childchanged 的回调。
statechanged 回调的注册应该比较好找,就是 zkclient 去连接 zk 的时候,建立的回调注册。这个里的回调处理是,一旦发现重连,那么把已经注册的、已经订阅的全部划分到 failed 的 list 里面,zkregistry 有一个心跳,定期检查这些 failed 的 list 里面是不是有数据,如果有那么重新注册、订阅。
childchanged 是在订阅的时候注册的,也就是 doSubscribe 里面。当 provider、configure、route 发生变化的时候,最终调用到 RegistryDirectory 的 notify 方法,回调的传过来的参数是当前这个目录比如 provider 目录下面的实际子节点的全部信息。以 provider 目录为例子,拿到这些重要信息以后,RegistryDirectory 就会根据新的 provider 的 url-list,做一次 refreshInvoker,做之前还把缓存的文件也根据这个更新的。
所以说 consumer 就是通过这个回调感知 provider 的变化的,看得出来如果 zk 回调出问题,dubbo 就找不到提供者,并且缓存文件也坏了。并且 dubbo 没有主动去轮训检查 zk 的当前信息,这块还是比较脆弱的。
我看 dubbo 官网说的是,阿里内部没用 zk,而是用自己的数据库作为注册中心。
6 refreshInvoker 里面做了啥?
前面只是讲到得到了一个 provider 的 url、list,并没有得到一个 provider 的实体,其实有了 provider,需要使用 dubboProcol 的 refer 去真正引用一个 service,与 service 建立长链接关系。底层建立 transport 层的通信关系,我是使用 netty4 看的有时间可以写写。
至于序列化那块,默认用的 hessian,比较繁琐。dubbo 没有用 protobuf,如果用的话,性能更好,并且代码应该也不需要写这么多。所以没有细研究了
7 消费者 refer 得到的到底是啥?
根据前面提到的,我们可以简单总结下,假如有三个 zk,那么 dorefer 干下面几个事情:
创建三个 registry、三个 directory。
与三个 registry 建立长链接,创建 consumer 目录上自己的信息,这个叫注册。
然后订阅 provider 的信息,并且把 provider 的 url 信息拿到后 refreshInvoker
与这些 dubbo-invoker 建立连接关系
8 那么问题来了,refer 方法结果是 dubbo-invoker 吗?如果是的话 就用不到 cluster、loadbalance 这些了。
在 doRefer 方法的最后,还是调用了 cluster.join (directory) 得到 invoke 返回回去。也就是最终返回了三个 MockClusterWrapper,里面是 FailoverClusterInvoker(默认 spi)
对于 directory 或者说 registry 做了一次 cluster.join,这是因为一个 directory 可能相同的版本的 provider 都不止一个,所以不同的 provider 是一个 cluster,这里面存在一个选择。
刚刚外面说了返回了三个 MockClusterWrapper,但是 consumer 或者说我们的业务使用者来说,不应该感知这些,所以对于三个注册中心的三个 MockClusterWrapper 还要做一次 cluster.join:
URL u = registryURL.addParameter(Constants.CLUSTER_KEY, AvailableCluster.NAME);
invoker = cluster.join(new StaticDirectory(u, invokers));
这次是指定用了 AvailableCluster,于是又返回了一个 MockClusterInvoker,里面包裹了真正的 AvailableCluster,这个 AvailableCluster 的 doInvoke 方法就是遍历自己的 invoke-list,只要可用就用这个,也就是说三个 zk,只要有一个没问题,就直接用这个 zk 的 url 代表的 provider
当然这个 ref 还要做一次 proxy 动态代理才能真正返回给用户使用
9 Route 是干啥用的,在哪里生效的?
在执行真正的 invoke 时候,为了使用 cluster、loadbalance,必须经过 clusterinvoke,在虚基类 AbstractClusterInvoker 的 doInvoke 方法中,首先是利用 directory.list 针对这个 invocation 做一次筛选,
List<Invoker<T>> invokers = doList (invocation); 可以不用考虑,就是根据调用方法拿到 invokers(这里的 invokers 都是通过 refreshinvokers 拿到的),对于 StaticDirectory 直接返回所有 invokers。
然后会用默认的 MockInvokersSelector 做一次 route 筛选处理,通过名字知道还是为了 mock 调试用的。其他的 route 还有 ConditionRouter 和 ScriptRouter,路由规则决定一次 dubbo 服务调用的目标服务器。dubbo 官网目前是试用阶段。
10 一次调用进行了两次 cluster 的选择
一次调用,首先选择任一一个可用 registry 或者说 directory 的 invoker,也就是确定用这个注册中心。后面还要选择到底用这个注册中心的哪个 provider,默认 spi 是 FailoverClusterinvoer,然后走 loadbalance、cluster 逻辑选出真正的 invoker,走 dubbo 调用流程
11 一机器上的 service 在两个不同的 zk 上面,有两个 registry,那么是不是也有两个 dubboinvoker?
不是的,在 doLocalExport 里面通过 ip - 端口 - interfacename 以及其他 service 的 url 作为 key,存到 map 里面后面如果相同,那么服用者 dubboinvoker
那么,一台机器上不同的 service 肯定用的是不同的 dubboinvoker,毕竟接口不一样、动态代理都不一样
12 一台机器不同的 service 用的同一个 transport 的 server 吗,如果用的 NETTY4,是不是意味着服用了一个 netty-server?
DubboProtocol 里面的 openServer(url)方法中,ExchangeServer server = serverMap.get (key); 这个 key 就是 ip+port。也就是说只要 service 用的 ip+port 是一样的,那么就是复用 netty-server
13 provider 在注册的时候,也 subscribe 了,那到底订阅了啥?
getSubscribedOverrideUrl 里面,addParameters (Constants.CATEGORY_KEY, Constants.CONFIGURATORS_CATEGORY,
默认给自己的 catogary 是 configures 目录。在后面 doSubscribe 方法里面,通过 for (String path : toCategoriesPath (url)) 拿到自己关心的目录,也就是 configure 目录了,而不是 providers 目录。
如果 configure 目录有变化,那么会走到 RegistryProtocol 的 OverrideListener 里面,通过把 configureUrl 和当前的 url 进行合并,再与当前 url 比较,如果不一样,那么基于 dubboprotocol 重新 export 一次。从而让 configure 上面的 url 生效
index.php?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10 is not defined at HTMLInputElement.onclick(index.php?route=checkout/checkout:1)
如何解决index.php?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10 is not defined at HTMLInputElement.onclick(index.php?route=checkout/checkout:1)
问题是当我在在线编译器上尝试时一切正常,但是当我在“OPENCART”网站中添加脚本时,我收到了该消息“index.PHP?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10未在 HTMLInputElement.onclick(index.PHP?route=checkout/checkout:1) 中定义”。那么我做错了什么?有人能帮我吗? ps:忘了说我全局添加了脚本还是不行
<input id="dostavkado9" onclick="onToggle9()" type="radio" value="9">
<input id="dostavkado10" onclick="onToggle10()" type="radio" value="10">
<input type="radio" name="shipping_method" value="flat.flat">
<input type="radio" name="shipping_method" value="pickup.pickup">
这就是我的脚本:
<script type="text/javascript">
var ofis = document.getElementById(''dostavkado9'');
var adres = document.getElementById(''dostavkado10'');
var dostavkaOfis = document.querySelector(''input[value="flat.flat"]'');
var dostavkaAdres = document.querySelector(''input[value="pickup.pickup"]'');
var dostavkaFree = document.querySelector(''input[value="free.free"]'');
dostavkaFree.checked=true;
function onToggle9(){
if( ofis.checked==true ) {
adres.checked=false;
dostavkaOfis.checked=true;
} else {
dostavkaFree.checked=true;}
}
function onToggle10(){
if( adres.checked==true ) {
ofis.checked=false;
dostavkaAdres.checked=true;
} else {
dostavkaFree.checked=true;}
}
</script>
我们今天的关于route--- 设置 Linux 内核中的网络路由表和linux 路由配置route的分享已经告一段落,感谢您的关注,如果您想了解更多关于Add and Delete an IP-Route in Linux、Angular 2:类型’Route []’的参数不能分配给’Route []’类型的参数.、dubbo 中 registry、route、directory、cluster、loadbalance、route 的关系以及一个引用操作和调用操作到底干了啥、index.php?route=checkout/checkout:1 Uncaught ReferenceError: onToggle10 is not defined at HTMLInputElement.onclick(index.php?route=checkout/checkout:1)的相关信息,请在本站查询。
本文标签: