为什么要控制带宽使用?

带宽资源有限,你可能需要针对性的限制某些应用占用的带宽,保证其它服务的正常稳定,那你就需要分配好大家的使用量了。好久以前,我在同步文件的时候就占用带宽很多,这同步也很猛,基本上能尽力跑满,太英勇了。

那其实我们可以做到按远端发送的IP限制带宽使用,或者限制某些端口的带宽占用。

如何控制?

先引述一下TC (man tc):

引用
NAME
       tc - show / manipulate traffic control settings

DESCRIPTION
       Tc is used to configure Traffic Control in the Linux kernel. Traffic Control consists of the following:

       SHAPING
              When  traffic is shaped, its rate of transmission is under control. Shaping may be more than lowering the available
              bandwidth - it is also used to smooth out bursts in traffic for better network behaviour. Shaping occurs on egress.

       SCHEDULING
              By  scheduling  the transmission of packets it is possible to improve interactivity for traffic that needs it while
              still guaranteeing bandwidth to bulk transfers. Reordering is also called prioritizing, and happens only on egress.

       POLICING
              Where  shaping  deals  with transmission of traffic, policing pertains to traffic arriving. Policing thus occurs on
              ingress.

       DROPPING
              Traffic exceeding a set bandwidth may also be dropped forthwith, both on ingress and on egress.

       Processing of traffic is controlled by three kinds of objects: qdiscs, classes and filters.


网上搜索整理了一个脚本:
限制 192.168.1.1/24 网段使用带宽在4M-10M直接

#!/bin/sh

# http://www.aslibra.com/blog/post/tc_bandwidth_control.php
# code by hqlulu

tc qdisc del dev eth0 root handle 1:
tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 4mbit ceil 10mbit
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.1/24 flowid 1:1

# modify dst xxxx


检查的命令:

[root@localhost ~]# tc qdisc show dev eth0
qdisc htb 1: r2q 1 default 0 direct_packets_stat 11591872
[root@localhost ~]# tc class show dev eth0
class htb 1:1 root prio 0 rate 4Mbit ceil 10Mbit burst 2099b cburst 2848b
[root@localhost ~]# tc filter show dev eth0
filter parent 1: protocol ip pref 16 u32
filter parent 1: protocol ip pref 16 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 16 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1
  match c0a80100/ffffff00 at 16


还谈不上对tc了解很多,以后再整理tc的资料,有需要这样的例子的朋友可以参考一下。
网上资料很多,搜一下就有应用的例子,暂时阿权这里就这个实例了,效果图:

点击在新窗口中浏览此图片

基本在4M-10M之间浮动,已经满足我的需求了,以后把参数都说明一下。
Tags: ,
默认使用的菜单例子都是创建的静态菜单,在某些时候会不方便,比如:

一篇文章的显示,按menu有加入收藏的功能,那实现的是如果未加入收藏,则是加入收藏的操作,否则是取消收藏的操作。

但onCreateOptionsMenu是实现不了这个功能的,它只会运行一次,如果再次按下menu,则不会变化。
我们看看程序说明:

引用
public boolean onCreateOptionsMenu (Menu menu)
Initialize the contents of the Activity's standard options menu. You should place your menu items in to menu.

This is only called once, the first time the options menu is displayed. To update the menu every time it is displayed, see onPrepareOptionsMenu(Menu).

The default implementation populates the menu with standard system menu items. These are placed in the CATEGORY_SYSTEM group so that they will be correctly ordered with application-defined menu items. Deriving classes should always call through to the base implementation.

You can safely hold on to menu (and any items created from it), making modifications to it as desired, until the next time onCreateOptionsMenu() is called.

When you add items to the menu, you can implement the Activity's onOptionsItemSelected(MenuItem) method to handle them there.

Parameters
menu  The options menu in which you place your items.

Returns
You must return true for the menu to be displayed; if you return false it will not be shown.
See Also
onPrepareOptionsMenu(Menu)
onOptionsItemSelected(MenuItem)


也就是说明了它是第一次显示菜单时调用的,每次更新,需要定义onPrepareOptionsMenu

引用
public boolean onPrepareOptionsMenu (Menu menu)
Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents.

The default implementation updates the system menu items based on the activity's state. Deriving classes should always call through to the base class implementation.


比如我这里可以这样处理:

//code from www.aslibra.com
public boolean onPrepareOptionsMenu(Menu menu) {
  menu.clear();
  if(isFavoutite){
    menu.add(0, NFav_ID, 0, R.string.menu_not_favourite).setIcon(R.drawable.ic_tab_selected_contacts);
  }else{
    menu.add(0, Fav_ID, 0, R.string.menu_favourite).setIcon(R.drawable.ic_tab_selected_contacts);
  }
  menu.add(0, Del_ID, 0, R.string.menu_delete).setIcon(R.drawable.ic_tab_selected_contacts);
  return super.onPrepareOptionsMenu(menu);
}


先清空菜单设置,然后根据是否收藏放置第一个选项,再增加删除菜单,完事!
Tags:
参与了《科技之光-人生答卷》的节目录制,观众也不好当,坐着两个小时也挺累的,屁股疼。
听老人家讲述自己的人生,都是酸甜苦辣的什么味道都有,很感动他们对事业的专注。

点击在新窗口中浏览此图片

刘光鼎,中国科学院院士,我国著名的地球物理、海洋地质学家。1952年,他从北京大学毕业后来到中国地质大学,参与创建了地球物理系。离开学校后,他跑遍了中国海的东西南北,领导科研人员,把数据凝聚成中国第一套系列海图。

点击在新窗口中浏览此图片

他钟爱武侠小说,琴棋书画都有一手,还在现场表演了太极拳

点击在新窗口中浏览此图片

他只给了自己60分,很多遗憾是在30多岁时碰到了文革时期,他觉得自己没有在黄金时期给国家做出贡献。

点击在新窗口中浏览此图片

徐凤翔,生态学教授,1978年始进藏工作近20年,曾任西藏农牧学院林学系教授、西藏高原生态研究所所长。
她热爱自己的事业,事业和家庭不能两全,她更加的偏向做好自己的事业,当初都舍得抛下自己的家庭奔往西藏做科考工作。
儿子说:“她把动物植物当儿子,把儿子当植物养。”
个人旅游签注(G)发给赴香港或澳门进行个人旅游的申请人。该签注分为3个月一次签注、3个月二次签注、1年一次签注、1年二次签注四种,每次在香港或澳门停留时间不超过7天。
 
  一、申请条件

  广东省常住户口居民。
  
  二、申请手续

1、受理机关:户口所在地的县(区)公安机关出入境管理部门。
    2、提交填写完整的《内地居民往来港澳地区申请表》1份(用钢笔或签字笔填写,不能使用圆珠笔),提交大一寸(48mmX33mm)背景为蓝色的正面免冠光学光面彩色照片2张。
  3、交验身份证、户口簿原件(申请人未满16周岁,只需交验户口簿;军人只需交验身份证明),并提交复印件。
    4、持有有效往来港澳通行证的,提交往来港澳通行证。
    5、已向公安部门通报出境备案的人员,申请办理《往来港澳通行证》及港澳个人旅游签注,须按干部管理权限提交单位意见。其他人员,无需提交单位或派出所意见。
    
  三、收费标准

往来港澳通行证每本100元。
  一次有效签注每项20元。
    二次有效签注每项40元
  (以上收费标准不含邮政速递服务费)

  
  四、处理时限

  首次申请往来港澳通行证及签注:15个工作日;
  再次申请签注:10个工作日。
其实就是使用java下的解析xml的方法就可以了,我了解的不多,可以参考附录内容:

看看我的示例代码:

//取得内容
public Map<Integer,String> fetchArticleContent(int aId){
  Map<Integer,String> article = new HashMap<Integer,String>();
  
  try{
    URL url = new URL("http://www.aslibra.com/teach/article_data.xml");
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new InputSource(url.openStream()));
    NodeList nl = doc.getElementsByTagName("content");
    for (int i=0;i<nl.getLength();i++){
      article.put(i, doc.getElementsByTagName("content").item(i).getFirstChild().getNodeValue());
    }
  }catch(Exception e){
    e.printStackTrace();
  }
  return article;
}


这里节点比较简单,把需要的节点作为Map对象里面的元素,这样方便使用。
注意给程序访问互联网的权限,否则就进入Exception里面了。
Tags: ,
分页: 9/53 第一页 上页 4 5 6 7 8 9 10 11 12 13 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐