精华内容
下载资源
问答
  • CEF

    2017-04-25 17:43:21
    Cisco Express Forwarding (CEF) 是一种先进的第 3 层交换技术,可用于在路由器中实现负载均衡。默认情况下,CEF 使用基于目标的负载均衡。如果已在某个接口上启用基于目标的负载均衡,则它会根据路径转发数据包,以...

           Cisco Express Forwarding (CEF) 是一种先进的第 3 层交换技术,可用于在路由器中实现负载均衡。默认情况下,CEF 使用基于目标的负载均衡。如果已在某个接口上启用基于目标的负载均衡,则它会根据路径转发数据包,以到达目标。如果目标存在两个或更多个并行路径,CEF 将采用同一个路径(单一路径),并避免并行路径。这是 CEF 默认行为的结果。如果在物理类型不同的接口(例如串行接口和隧道)上同时执行负载分担,CEF 将采用单一路径。散列算法将会确定要选择的路径。当您具有不同的物理接口(例如串行接口和隧道)时,要利用 CEF 中的所有并行路径并对流量进行负载均衡,您必须启用基于数据包的负载均衡。因此,根据配置和拓扑(串行接口或隧道),负载分担在默认的 CEF 负载均衡模式下可能无法正常工作。

    请基于数据包启用这些命令来实现负载分担:

    configure terminalinterface serial 0ip load-sharing per-packet
    
     
    
     

    简介

    编辑传统路由器的基本作用是路由计算和包转发,通常基于共享存储器体系结构,采用集中式CPU,即单个CPU

     

    (或多个CPU,联结成路由器簇)控制共享总线,连接多个接口卡上,接口卡包含简单的队列等结构,与CPU通信,通过共享总线实现数据包转发。随着Internet的快速发展和大量新的服务需求的不断出现,对网络的路由和交换性能提出了更高的要求,要同时提高包转发速率和系统的性能,必须对传统路由器与交换设备的设计体系结构进行改进,并加入一些新的设计方案以完善系统性能。采用CEF技术的GSR1200系列千兆交换路由器,在体系结构,路由方式和接口卡性能等方面都有质的改变,特别适用于大业务量的ISP网络的核心层,同时也广泛应用于高速企业网的主干。

    交换算法

    编辑

    过程交换

    最初的Cisco路由器采用集中式CPU包交换,所有的包通过共享总线传到CPU,经路由表查找,CRC重算,再通过共享总线把包传到适当的线路卡上。

    快速交换

    到达某特定目的地址的IP包通常会引起数据包流,即假设交换过到特定目标的包之后,另一个很可能不久也会到达。通过构建交换目标的高速缓存,可以减少包在全路由表中查找同一标的次数,这种“一次路由,然后交换”的方式称为快速交换,快速交换大大提高了路由器的包转发速率,因而成为Cisco路由器平台上缺省的交换机制。但有一点需要注意,IP路由表的改变会使得高速缓存无效,在路由状况不断变化的环境中,路由高速缓存的优势将受到很大限制。

    自治交换

    自治交换的特点是从CPU中卸载了一些交换功能。在效果上,将路由高速缓存功能从CPU移到辅助交换处理器上,线路卡上的接收包先在交换处理器中完成本地路由高速缓存目标的查找,若查找失败时才中断CPU执行路由表查找。在此,Cisco将周期性计算路由的CPU改名为路由处理器,把辅助交换处理器改名为交换处理器。Cisco 7000系列的路由器上执行自治交换,可使吞吐量等性能进一步提高。

    分布式交换

    随着VIP(Versatile Interface Processor,通用接口处理器)卡引入,路由器的交换体系逐渐向对等多处理器结构发展。每个VIP卡都包含RISC处理器,维护最新的由路由交换处理器产生的快速交换高速缓存的拷贝,并能独立实现路由交换的功能,高速完成两种类型的交换---本地VIP的交换和VIP之间的交换。

    特快交换

    如前所述,快速交换的高速缓存机制在Internet之类的高速动态路由选择环境(经常存在网络拓扑变化,路由改变、路由震荡等)中不能很好地伸缩,路由的改变导致高速缓存无效,而重建高速缓存(即执行“过程交换”的过程)在计算上开销很大;同时,随着互联网及其业务的迅猛发展,基于WEB的各种应用和交互式业务使得通信次数多而通信时间短的实时数据流大量增加,快速交换的高速缓存内容处于不断变化之中,重建高速缓存的负担加大,从而导致路由器性能的降低。CEF特快交换技术正是针对上述不足而设计提出的。

    快速交换

    编辑

    与快速交换相似,CEF也使用自己建立的数据结构(而不是路由表)来执行交换操作。快速交换通过生成并查找路由高速缓存交换数据包,该路由高速缓存交换数据包,该路由高速缓存的条目(包括目的IP地址,输出接口,MAC地址头信息等)是在第一个数据包到来时,对整个路由表执行最长匹配查找算法获得下一跳IP地址,然后查找ARP缓存获得第二层的MAC地址信息,并写入路由高速缓存,之后的数据包则根据已经生成的高速缓存的条目直接重写MAC头信息完成交换操作。

    CEF通过FIB和邻接表对数据包进行交换,但FIB和邻接表是在数据包到来以前,由CPU根据路由表生成并定时更新的,因此到达路由器的第一个数据包也无须执行查找路由表的过程,直接由FIB和邻接表获得新的MAC头信息,就可进行交换了,对于拥有大容量路由表的路由器来说,这种预先建立交换查找条目的方式能够有效地提高交换性能。

    特快交换

    编辑

    部件

    CEF是一种高级的第三层交换技术,它主要是为高性能、高伸缩性的第三层IP骨干网交换设计的。为优化包转发的路由查找机制,CEF定义了两个主要部件:转发信息库(Forwarding Information base)和邻接表(Adjacency Table)。

    转发信息库(FIB)是路由器决定目标交换的查找表,FIB的条目与IP路由表条目之间有一一对应的关系,即FIB是IP路由表中包含的路由信息的一个镜像。由于FIB包含了所有必需的路由信息,因此就不用再维护路由高速缓存了。当网络拓扑或路由发生变化时,IP路由表被更新,FIB的内容随之发生变化。

    CEF利用邻接表提供数据包的MAC层重写所需的信息。FIB中的每一项都指向邻接表里的某个下一跳中继段。若相邻节点间能通过数据链路层实现相互转发,则这些节点被列入邻接表中。

    系统一旦发现邻接关系,就将其写到邻接表中,邻接序列随时都在生成,每次生成一个邻接条目,就会为那个邻接节点预先计算一个链路层头标信息,并把这个链路层头标信息存储在邻接表中,当决定路由时,它就指向下一网络段及相应的邻接条目。随后在对数据包进行CEF交换时,用它来进行封装。欲查看邻接表的有关信息,可以使用Cisco IOS的命令:show adjacency/show adjacency detail。当我们查看邻接表信息时,会发现有以下两种主要邻接类型:Host adjacency和Point to Point。Host adjacency类型通常的显示是一个IP地址,它表示邻接的下一跳IP地址;Point to Point类型的显示是“point 2point”,表示这是一条点对点电路。此外还有其他一些特殊类型,如Null adjacency、Glean adjacency等,此外不再赘述。

    操作模式

    CEF有两种模式:集中式和分布式。集中式允许一个路由处理模块运行特快交换,即FIB和邻接表驻留在路由处理模块中,当线路卡不可用或不具备分散CEF交换的功能时,就可使用集中CEF交换模式。

    分布式(一般记作dCEF)允许路由器的多个线路卡(VIP)分别运行特快交换功能,前提是线路是VIP线路卡或GSR线路卡。中央路由处理器完成系统管理/路由选择转发表计算等功能,并把CEF表分布到单个线路卡;每个线路卡维护着一个FIB和邻接表的相同的拷贝。线路卡在端口适配器之间执行快速转发,这样,交换操作就无需路由交换模块的参与了。DCEF采用一种“内部过程通信”机制来保证路由处理器和接口卡之间FIB和邻接表的同步。

    Cisco 12000系列路由器只运行dCEF模式,由线路卡执行交换功能。在其它路由器中,可以在同一个路由器中混合使用各种类型的接口卡,如果一个不支持CEF的接口卡收到数据包后,将把数据包转发到路由处理器来进行处理,或把该数据包转发到下一个网络段处理。

    CEF在路由器上是全局激活的,但可在每个接口(或VIP的底板)上启用/禁用CEF;CEF和快速交换模式也可同时运行,但不推荐这样使用,因为会占用大量的系统维护资源。

    负载平衡

    编辑

    当到达某一目的IP地址存在多条路径时,每条路径都有一个反映其代价的metric值,路由协议通过计算获得到达目的地址的具有最短metric值的路径,数据包通过该路径到达目的地址。负载平衡的目的则是要把流量分配到多条路径中,这样可优化资源的使用。CEF特快交换支持两种类型的负载平衡---按目的地配置的负载平衡和按数据包配置的负载平衡。

    按目的地配置负载平衡

    基本原理是:对于给定的一对源/目的IP地下,即使有多个路径可用,也可保证数据包采用同一路径;通往不同源/目的IP地址的数据流则倾向于采用不同的路径。通过采用按目的地负载平衡的方法,可以保证对某个源/目的IP地址对的数据包以一定的次序到达。当启用CEF时,按目的地配置的负载平衡被默认启用。

    按数据包配置负载平衡

    基本原理是:采用轮转法确定各个数据包按哪条路径到达目的地。这种负载平衡方法可使路由器在路径上连续发送数据包,即保证路径的使用状况比较好,但针对一个源/目的IP地址对的数据包可能会采用不同的路径,从而导致目的端对数据包的重新排序。这种类型的负载平衡对某些类型的数据流传送不是很合适(如VoIP数据流)。当然,若在某一源/目的IP地址对之间有大量的数据流,通过并行链路传送,如果按目的地负载平衡方式,将会使某条链路负担过重,而其他链路上的数据流很少,此时采用按数据包的负载平衡是合理的。

    小结

    编辑

    CEF是专门为高性能、高伸缩性的IP骨干网络设计的一种高速交换方式。从上述介绍我们不难看出,在大规模的动态IP网络中,CEF能够提供前所未有的交换的一致性和稳定性。它能够有效弥补快速交换的高速缓存条目频繁失效的缺陷,采用dCEF分布式交换可使每个线路卡进行完全的交换,提供更优越的性能;CEF比快速交换的路由高速缓存占用内存要少,并能提供负载平衡,网络记账等功能。借助CEF特快交换技术和其它一些革命性的创新技术,Cisco的GSR路由器在全球取得了巨大的成功,在中国互联网基础设施建设中发挥着极其重要的作用。

    展开全文
  • cef

    2015-09-09 16:25:00
    1. 删除cef3浏览器的右键菜单 // client_handler.cpp void ClientHandler::OnBeforeContextMenu( CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<...

    1. 删除cef3浏览器的右键菜单

    // client_handler.cpp
    
    void ClientHandler::OnBeforeContextMenu(
        CefRefPtr<CefBrowser> browser,
        CefRefPtr<CefFrame> frame,
        CefRefPtr<CefContextMenuParams> params,
        CefRefPtr<CefMenuModel> model) {
            model->Clear();
            return;
    }
    View Code

    2. 禁止cef3浏览器鼠标形状变化

      当网页加载完毕后,将鼠标放在超链接上,鼠标会变成小手型状。如果你不希望它变化,想让鼠标一直显示箭头的形状则可以将参数(mouse_cursor_change_disabled_)设置为true,不过我个人一般是设置为false。

    // client_handler.cpp
    
    ClientHandler::ClientHandler()
      : browser_id_(0),
        is_closing_(false),
        main_handle_(NULL),
        edit_handle_(NULL),
        back_handle_(NULL),
        forward_handle_(NULL),
        stop_handle_(NULL),
        reload_handle_(NULL),
        focus_on_editable_field_(false) {
    #if defined(OS_LINUX)
      gtk_dialog_ = NULL;
    #endif
    
      // Read command line settings.
      CefRefPtr<CefCommandLine> command_line =
          CefCommandLine::GetGlobalCommandLine();
    
      if (command_line->HasSwitch(cefclient::kUrl))
        startup_url_ = command_line->GetSwitchValue(cefclient::kUrl);
      if (startup_url_.empty())
        //startup_url_ = "http://www.google.com/";
        startup_url_ = "http://www.baidu.com/";
    
      mouse_cursor_change_disabled_ = true;     // 禁止鼠标形状变化
      // mouse_cursor_change_disabled_ = false; // 运行鼠标形状变化。我一般都设置为false,这样鼠标放到带url的文字上会变成手型
    }
    View Code

     

    test:

    http://microlink.im/x.html

    http://tests/window

    http://localhost/test2.php   http://localhost/test2.html

    http://localhost/window.html

    http://localhost/window-31.html

    http://localhost/window-32.html

    转载于:https://www.cnblogs.com/hezhixiong/p/4795119.html

    展开全文
  • javacef

    万次阅读 2017-03-24 21:24:50
    javacef即java Chromium Embedded Framework,其功能是通过在java应用中嵌入谷歌浏览器内核Chromium。 编译java-cef的过程可参考以下文档及视频: ...

    javacef即java Chromium Embedded Framework,其功能是通过在java应用中嵌入谷歌浏览器内核Chromium。

    编译java-cef的过程可参考以下文档及视频:

    https://bitbucket.org/chromiumembedded/java-cef/wiki/BranchesAndBuilding#markdown-header-background

    http://www.cnblogs.com/Johness/tag/cef3/

     

    由于编译的过程比较繁琐,而且需要安装庞大的visual studio以及cmake,所以把我编译好的写在这里,不想自己编译的可以直接下载来用。这里只提供windows版本。

    以下版本采用了visual studio 2015进行编译。cef的版本是:cef_binary_3.2623.1401.gb90a3be_windows64

    http://pan.baidu.com/s/1pLPASLt

     

    另外在java里使用Chromium更简单的方法是使用jxbrowser组件。非常方便,可惜是要收费的,可以申请一个月的试用版本。

    展开全文
  • <div><p>cef.patch adds some new files which are stored in a separate directory called cef_desura. We should separate this into an own cmake target (maybe under src/shared/cef_desura) and link against ...
  • cef源码(编译cef用)

    2019-06-19 14:09:20
    cef源码,qt5.6以后嵌入式网页使用
  • CEF Upgrade

    2020-12-30 23:09:29
    <p>CEF often has breaking bugs which block us from upgrading to certain versions. The purpose of this issue is to track those bugs so that we know why we can't use a version and what to verify is ...
  • CEF-CEFDemo001:你好,世界
  • cef-chrome:带有cef的qt
  • cef svn

    2014-05-17 14:31:46
    cef svn
  • cefglue整合 包括cef2623、cef3497在低于vista操作系统调用cef2623(支持xp),在vista以上调用3497。并且根据32或64位系统调用x86或x64
  • CefSharp-cefsharp-49.zip

    2020-06-09 11:24:07
    C#WinForm中使用CefSharp.Winform的控件下载,支持环境为VS2010、.NET4.0。CefSharp.Winform版本为49.0.1
  • CEF4Delphi

    2020-09-25 13:23:52
    1、下载CEF4Delphi 2、下载CEF4Delphi相关的环境(dll、pak等文件),有两个版本win32【D7】、win64【fmx】. 3、解压CEF4Delphi到3rd组件文件夹下【根据个人情况】 4、解压cef_binary_3.3626.1891.g52be333_...
  • CefSharp4.9.0

    2019-03-20 22:07:57
    CefSharp4.9.0 winforms,新建项目需要引用CefSharp.dll,CefSharp.WinForms.dll,CefSharp.Core.dll,在程序启动时,需要设置CefSettings,例如:CefSharp.Cef.Initialize(new CefSharp.CefSettings());
  • Update CEF

    2020-12-08 22:06:20
    <div><p><em>Issue by <strong><a href=...Maybe updating CEF could solve some additional issues, like patching CEF or #199 , #288 .</p><p>该提问来源于开源项目:desura/desura-app</p></div>
  • CEF update

    2020-12-09 02:33:14
    It might be a problem with old CEF libs. So my solution was to update CEF. <p>Iv found this: <p>Official Chromium Embedded Framework: https://bitbucket.org/chromiumembedded/cef/src/master/ Automated...
  • 特殊CEF-源码

    2021-02-12 22:27:58
    特殊CEF
  • CefSharp-cefsharp-71.zip

    2019-06-13 16:31:42
    Branch CEF Version VC++ Version .Net Version Status cefsharp/71 3578 2015 4.5.2 Pre-Release 使用Visual Studio 15 ,Framework版本:v4.5.2
  • cef_binary

    2019-04-04 15:02:47
    集成chrome 内核收集到的 cef_binary , 包含cef 1x,2x,41,43 版本。 具体看 https://www.spotify.com/sg-en/opensource/ cef 对应 chrome版本 cef_binary_1.1364.1123_windows cef_binary_3.1547.1412_...
  • CefSharp.WinForms.ChromiumWebBrowser简易浏览器可以用来做测试,开发cpu选X86,net版本4.52 CefSharp 71.0.1.0 CEF 3.3578.1859.g3563564 net版本4.52
  • Winform集成CefSharp,CefSharp单独目录 https://blog.csdn.net/a497785609/article/details/80678787
  • cefpython_cefpython3

    2020-12-09 11:01:51
    常用pip install cefpython3# coding=gbkfrom cefpython3 import cefpython as ceffrom flask import Flaskimport ctypesimport tkinter as tkimport threadingimport osclass Application(tk.Frame):navigation_bar...

    常用

    pip install cefpython3

    # coding=gbk

    from cefpython3 import cefpython as cef

    from flask import Flask

    import ctypes

    import tkinter as tk

    import threading

    import os

    class Application(tk.Frame):

    navigation_bar = None

    def __init__(self, root):

    root.geometry("900x640")

    tk.Frame.__init__(self, root)

    self.master.title("")

    self.bind("", self.on_configure)

    self.browser_frame = BrowserFrame(self, self.navigation_bar) # 浏览器框架

    self.browser_frame.grid(row=1, column=0,sticky=(tk.N + tk.S + tk.E + tk.W))

    tk.Grid.rowconfigure(self, 1, weight=1)

    tk.Grid.columnconfigure(self, 0, weight=1)

    self.pack(fill=tk.BOTH, expand=tk.YES) # 包装 Application

    def on_configure(self, event):

    if self.browser_frame:

    width = event.width

    height = event.height

    if self.navigation_bar:

    height = height - self.navigation_bar.winfo_height()

    self.browser_frame.on_Application_configure(width, height)

    class BrowserFrame(tk.Frame):

    closing = False

    browser = None

    def __init__(self, master, navigation_bar=None):

    self.navigation_bar = navigation_bar

    tk.Frame.__init__(self, master)

    self.bind("", self.on_configure)

    def embed_browser(self):

    window_info = cef.WindowInfo()

    rect = [0, 0, self.winfo_width(), self.winfo_height()]

    window_info.SetAsChild(self.get_window_handle(), rect)

    self.browser = cef.CreateBrowserSync(

    window_info,

    url="file://{}".format(os.path.join(os.getcwd(), 'handsontable.html'))

    )

    self.message_loop_work()

    def get_window_handle(self): # 获取窗口句柄

    if self.winfo_id() > 0:

    return self.winfo_id()

    def message_loop_work(self): # 消息循环工作

    cef.MessageLoopWork()

    self.after(10, self.message_loop_work)

    def on_configure(self, _): # 判断是否有 cef 对象

    if not self.browser:

    self.embed_browser()

    def on_Application_configure(self, width, height): # cef 窗口大小

    if self.browser:

    pass

    ctypes.windll.user32.SetWindowPos(self.browser.GetWindowHandle(),

    0,0, 0, width, height, 0x0002)

    def runserver():

    app = Flask(__name__)

    @app.route('/')

    def index():

    return '

    233

    '

    app.run()

    if __name__ == '__main__':

    threading.Thread(target=runserver).start()

    root = tk.Tk()

    app = Application(root)

    cef.Initialize()

    app.mainloop()

    cef.Shutdown()

    os._exit(0)

    检查更新

    语法

    返回值

    作用

    ver["version"]

    66.0

    CEF Python 版本

    ver["chrome_version"]

    66.0.3359.181

    Chromium 版本

    ver["cef_version"]

    CEF 3.3359.1774.gd49d25f

    CEF 版本

    ver=platform.python_version()

    arch=platform.architecture()[0]

    Python 3.6.5

    64bit

    python 版本

    位数

    assert cef._version_ >= "57.0", "CEF Python v57.0+ required to run this"

    CEF 版本是否大于 57 不大于抛异常

    from cefpython3 import cefpython as cef

    import platform

    ver = cef.GetVersion()

    print("[hello_world.py] CEF Python {ver}".format(ver=ver["version"]))

    print("[hello_world.py] Chromium {ver}".format(ver=ver["chrome_version"]))

    print("[hello_world.py] CEF {ver}".format(ver=ver["cef_version"]))

    print("[hello_world.py] Python {ver} {arch}".format(ver=platform.python_version(),arch=platform.architecture()[0]))

    assert cef.__version__ >= "57.0", "CEF Python v57.0+ required to run this"

    打包

    pip install pyinstaller

    pip install pycrypto

    python pyinstaller.py

    1、安装 Microsoft Visual C++ 14.0 选择 Windows 8.1 SDK 功能

    2、复制 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\stdint.h

    3、粘贴 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt

    4、修改 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\inttypes.h

    #include

    #include "stdint.h"

    5、卸载 Micrsoft Visual C++ 14.0

    展开全文
  • 头等客户 使用CEF的锈库。 目前非常基本且最少,但不依赖于CEF views API。
  • Chromium嵌入式框架(CEF)是用于在其他应用程序中嵌入基于Chromium的浏览器的简单框架。 快速链接 项目页面 教程-https: 常规用法-https: Master Build快速入门-https: 分支机构和建筑物-https: 支持论坛-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,861
精华内容 4,744
关键字:

CEF