精华内容
下载资源
问答
  • PHP开发web程序的两种模式

    千次阅读 2017-07-16 19:58:32
    从执行流程上来看,所有程序可以分为同步程序和异步程序。众所周知,同步程序流程清晰,开发友好,容易上手,相比之下异步程序的...本文通过对两种开发模式进行比较,旨在说明二者实现上的异同,供广大PHP程序员参考。

    本文适合对PHP web开发比较感兴趣的同学阅读,需要具备一定的web后台开发经验。

    一、背景

    从执行流程上来看,所有程序可以分为同步程序和异步程序。众所周知,同步程序流程清晰,开发友好,容易上手,相比之下异步程序的优点在于程序并发度高,资源能够得到充分利用。于是出现了一些基于协程调度的框架,兼具同步程序和异步程序的优点。对应到PHP领域,除了传统的LAMP/LNMP同步开发模式,还出现了类似swoole的异步协程开发模式。本文通过对两种开发模式进行比较,旨在说明二者实现上的异同,供广大PHP程序员参考。

    二、LAMP/LNMP

    一直以来,PHP web开发采用LAMP/LNMP架构,即Linux、Nginx,Mysql和PHP。搭建的环境大同小异,大致结构为:

    当请求进入时,web server将请求转交给PHP-FPM,PHP-FPM是一个进程池架构的FastCGI服务,内置PHP解释器。FPM负责解释执行PHP文件生成响应,最终返回给web server,展现至前端。PHP文件中实现了许多业务逻辑,包括Mysql和Nosql的访问,调用第三方应用等等。

    由图可见,从请求到响应,整个处理流程十分清晰,层次结构也很明显,大致分为接入层,逻辑层和数据访问层。但是这个架构的缺点也很明显,主要包括:

    • FPM进程池中进程数目有限,在高并发场景下处理能力可能会受进程数目和系统其他资源的限制

    • 当后端PHP程序长时间阻塞时,会挂起整个PHP-FPM进程

    • 每次请求处理的过程都意味着一次PHP文件解析,环境设置等不必要的耗时操作

    • PHP进程处理完即销毁,无法在PHP程序中使用连接池等技术实现性能优化

    • ......

    针对上述问题,LAMP/LNMP架构做了许多优化和调整,比如:

    • 设置超时时间防止FPM假死

    • 利用Opcache扩展避免PHP文件的重复解析和加载

    • 采用本地代理的方式实现降低建立连接的开销

    • ......

    三、Swoole

    针对LAMP/LNMP架构的问题,swoole从PHP扩展出发,解决了上述问题,其采用的进程模型为:


    Swoole底层使用多进程架构,Master-Manager-Worker。

    • Master进程内置多个Reactor线程进行网络收发包,当收到完整的请求之后,其将请求转交给Worker进程执行业务逻辑。

    • Manager进程由Master进程派生而成,主要负责Worker进程的创建和销毁类工作。

    • Worker进程执行PHP业务逻辑代码,生成响应后发送至Master进程的Reactor线程,最终展现至前端。

    • 进程模型中还包括taskWorker,主要执行一些额外的耗时task任务等。

    相比于LAMP/LNMP,Swoole进程模型最大的特点在于其多线程Reactor模式处理网络请求,使得其能轻松应对C10k连接。除此之外的优点还包括:

    • 全异步非阻塞,占用资源开销小,程序执行效率高

    • 程序运行只解析加载一次PHP文件,避免每次请求的重复加载

    • 进程常驻,使得连接池和请求之间信息传递等的实现成为可能

    • ......

    Swoole在扩展层面实现异步非阻塞操作,提供给PHP回调的操作接口。由于回调写法嵌套较深,逻辑混乱,现有的基于Swoole的PHP框架多数采用yield协程调度的方式实现,这样就可以用同步的代码写法来达到异步的效果,典型实现如ZanPHP框架。

    当然,协程的写法也并不是没有代价,开发者需要更多地了解一些底层的原理实现,相比LAMP/LNMP来说对于开发者的门槛较高。

    四、总结

    综合以上区别,笔者建议,在简单的http server开发场景下,优先采用LAMP/LNMP架构,更加专注于业务逻辑实现。在高并发或对于性能比较关注的场景,或者需要实现类似tcp server,RPC服务,SOA服务等情形下,建议使用基于swoole的协程调度框架,如ZanPHP等。

    想要获取最新技术文章?欢迎订阅微信公众号----软件编程之路,鼓励作者持续写作。


    展开全文
  • Java Web工程目录结构

    万次阅读 2017-08-03 11:43:18
    Java web 结构java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构。工程发布目录结构结构,为servlet容器加载web应用的统一标准目录,而工程编译目录结构是为了方便工程编写、修改...

    说明

    介绍java web 工程的基本结构目录。记录java web 工程结构的学习。

    Java web 结构

    java web严格来说分为两类工程结构:一个是工程编译目录结构,一个是工程发布目录结构。工程发布目录结构结构,为servlet容器加载web应用的统一标准目录,而工程编译目录结构是为了方便工程编写、修改的临时结构,需要通过工程构建工具(ant,maven,gradle等)编译生成最终的运行时发布结构。因此,工程编译目录结构并不统一,与所使用的编译工具有关(也和配置有关)。

    工程发布结构

    这个也是最终的工程目录结构,结构示意如下:

    -helloapp
     -index.html
     -othersDirs
      -*.html
      -*.css
      -*.png
      - ......
     -WEB-INF
      -web.xml
      -classes
       -pakageName
        -*.class
      -lib
      -otherConfigfile
     -META-INF
      -MANIFEST.MF

    如上,一般可以将其分为以下几个部分内容:

    • 静态文件资源

    静态文件资源包括需要访问的jsp、html、css、js、png、ico、gif、conf配置文件等,可以将其放在任意位置,一般默认是防止主目录下,访问后缀路径为文件相对主目录路径。如上,index.html的相对访问路径为:/index.html ,绝对访问路径为: http://domain:port/helloapp/index.html .

    • 工程配置文件(部署描述符文件)

    即是java web 项目最主要的构成部分之一:web.xml.其对应位置如上放在WEB-INF的根目录下。用于配置工程的一些基本配置。如,访问控制配置、默认访问配置、过滤配置、时间监听等。其基本格式如下所示:

    
    <!--web.xml对于大小写敏感 -->
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
    
    <display-name>helloapp</display-name>
    
    <!--上下文传入键值对-->
    <context-param>
        <param-name>key</param-name>
        <param-value>value</param-value>
    </context-param>
    
    <!--设置web-app默认主页 -->
      <welcome-file-list>  
            <welcome-file>login.html</welcome-file>  
            <welcome-file>index.htm</welcome-file>  
            <welcome-file>index.jsp</welcome-file>  
            <welcome-file>default.html</welcome-file>  
            <welcome-file>default.htm</welcome-file>  
            <welcome-file>default.jsp</welcome-file>  
        </welcome-file-list>
    
    <!--创建servlet对象-->
    <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>mypack.DispatcherServlet</servlet-class>
    </servlet>
    
    
    <!--提供servlet对象指向-->
    <servlet-mapping>
       <servlet-name>dispatcher</servlet-name>
       <url-pattern>/dispatcher</url-pattern>
    </servlet-mapping>
    </web-app>
    
    • 依赖,可执行文件

    这是java web 应用的核心部分了,主要用于实现web 应用的动态创建逻辑、动态响应的功能,为java的具体实现部分,主要分成两个部分分布:一个是WEB-INF/lib/*.jar,为当前应用需要使用的依赖jar包,另一个为WEB-INF/classes/…/*.class文件,为web工程编译生成的class文件,查找顺序为先查找lib目录下的*.jar文件,然后查找classes/…/*.class文件.

    • web 版本信息等

    这个是生成发布版本时根据配置自动生成的配置信息,再META-INF/MANIFEST.MF.

    工程编译目录结构

    这里主要介绍两种目录结构:一个是eclipse默认创建的动态web应用结构,一个是maven构建的工程目录结构。

    1. Dynamic Web Project结构

    eclipse默认动态结构如下所示:

    helloapp
    -src
     -packageName
      -*.java
    -WebContent
      -META-INF
       -MANIFEST.MF
      -WEB-INF
       -web.xml
       -lib
        -*.jar
    

    如上,主要分为两个部分:src对应的具体java逻辑实现部分;WebContent对应依赖、工程配置、静态文件部分,默认WebContent根目录对应于发布工程根目录,具体的目录结构对应关系可以通过:

    projectName(右键) ——>Properties——>DeployMent Assembly
    

    查看,也可以在此自定义修改对应关系(需谨慎).

    1. Maven工程结构

    maven结构比较方便web应用的构建,对于依赖、配置等比较方便。如下,为其基本的工程结构:

    helloapp
    -src
     -main
      -java
       -pacakgename
        -*.class
      -resources
       -configfile
      -webapp
       -index.html
       -login.jsp
       -othersFolders
       -WEB-INF
        -web.xml
    -target
     -generated-files
    -pom.xml
    

    其默认部署对应关系如下:

    sourceDeploy Path
    src/main/javaWEB-INF/classes
    src/main/resourcesWEB-INF/classes
    src/main/webapp/
    src/main/webapp/WEB-INF/WEB-INFWEB-INF/web.xml
    maven DependenciesWEB-INF/lib

    其中pom.xml主要是用来配置工程依赖和编译、发布等版本的控制的。

    Enjoytoday,EnjoyCoding

    展开全文
  • 概述现在的web框架可以分为基于请求的(request-based)和基于组件的(component-based)大阵营。前者的代表有Struts和Spring MVC等,后者的成员则有JSF、Tapestry、ASP.NET等等。基于请求的框架较早出现,它用以...

    概述

    现在的web框架可以分为基于请求的(request-based)和基于组件的(component-based)两大阵营。前者的代表有Struts和Spring MVC等,后者的成员则有JSF、Tapestry、ASP.NET等等。

    基于请求的框架较早出现,它用以描述一个web应用程序结构的概念和传统的静态Internet站点一样,是将其机制扩展到动态内容的延伸。对一个提供HTML和图片等静态内容的网站,网络另一端的浏览器发出以URI形式指定的资源的请求,Web服务器解读请求,检查该资源是否存在于本地,如果是则返回该静态内容,否则通知浏览器没有找到。Web应用升级到动态内容领域后,这个模型只需要做一点修改。那就是web服务器收到一个URL请求(相较于静态情况下的资源,动态情况下更接近于对一种服务的请求和调用)后,判断该请求的类型,如果是静态资源,则照上面所述处理;如果是动态内容,则通过某种机制(CGI、调用常驻内存的模块、递送给另一个进程如Java容器)运行该动态内容对应的程序,最后由程序给出响应,返回浏览器。在这样一个直接与web底层机制交流的模型中,服务器端程序要收集客户端籍get或post方式提交的数据,转换,校验,然后以这些数据作为输入运行业务逻辑后生成动态的内容(包括HTML、JavaScript、CSS、图片等)。

    基于组件的框架采取了另一种思路,它把长久以来软件开发应用的组件思想引入到web开发。服务器返回的原本文档形式的网页被视为由一个个可独立工作、重复使用的组件构成。每个组件都能接受用户的输入,负责自己的显示。上面提到的服务器端程序所做的数据收集、转换、校验的工作都被下放给各个组件。现代web框架基本上都采用了模型、视图、控制器相分离的MVC架构,基于请求和基于组件两种类型大都会有一个控制器将用户的请求分派给负责业务逻辑的模型,运算的结果再以某个视图表现出来,所以两大分类框架的区别主要在视图部分,基于请求的框架仍然把视图也就是网页看作是一个文档整体,程序员要用HTML、Javascript和CSS这些底层的代码来写“文档”,而基于组件的框架则把视图看作由积木一样的构件拼成,积木的显示不用程序员操心(当然它们也是由另一些程序员开发出来的),只要设置好它绑定的数据和调整它的属性,把他们大大从编写HTML、Javascript和CSS这些界面的工作中解放出来。

    优劣比较

    至此,两种类型的框架似乎已分出优劣——基于组件的框架封装了基于请求的框架在视图方面的细节,省去了程序员的精力和时间,是一种进步。实际情况却并非这么简单。在传统的桌面应用程序的开发中,类似的论断没有任何问题,基于界面组件(在这个上下文里就是控件)的技术早已成为标准,Visual Studio系列、Dephi、PowerBuilder等等都是如此,没有人会想去用底层的GUI接口自己去画一个个窗体、菜单、树目录……

    但是web应用的界面开发却有很大不同。首先它是基于HTML这样的描述型(declarative)语言,几行文本就可以“画”出包括表格、按钮的一个简单页面,在构建界面上比传统的桌面开发的命令型(imperative)语言高效。如果是使用现成的元件(如文本框、组合框)构建界面,前者比后者用的行数要少。如果是创建新的控件(如菜单、树目录、导航器),前者利用DIV、TABLE、IMG之类的基本材料,CSS赋予的丰富显示效果和Javascript带来的动态行为也比用C++、Java这样的语言新开发一个控件容易。基于请求的框架与基于组件的框架在开发视图的工作量和难度上的差别就没有传统的桌面应用程序里自己动手开发控件和使用现成的控件的差别那么大。

    另一方面,浏览器是迄今为止最难为其开发和调试程序的环境。HTML最初是被设计用来显示静态的信息,对它解析的高度容错性是为了让浏览器尽量能显示文档的内容,忽略粗心的编写者犯的错误。这样做的副作用就是纵容错误代码的普遍存在。当HTML被用来设计应用程序的界面时,这种容错的风格就不适合了。HTML的编辑器普遍允许语法错误的存在,浏览器载入时只是会显示异常,不会明确地报告错误,这样就给发现潜在的问题和问题发生时定位来源带来很大困难。类似的,Javascript被发明时宽容的解释运行风格也是因为它被定位为执行一些辅助性的功能,同时为了减少对程序员的严格性上的要求。当Javascript成为web应用程序必不可少的前端开发语言时,这种宽松性也导致了很大的代价。同时由于web应用程序的流行和各大厂商的重视,浏览器作为前端的平台软件也告别了一家垄断,呈现群雄逐鹿的局面。不同浏览器在标准执行和功能扩展上的差别又给开发人员带来新的挑战——如何使网站能在所有主流浏览器上正常显示和操作?最后,由竞争带来的HTML、Javascript、CSS等前端技术和编程模式的进化和浏览器升级的日新月异使得程序员有必要及时更新代码——一个出色的web应用程序几个月后就可能因为用户使用另一种或升级后的浏览器显示或操作异常。也就是说,应用程序的视图的寿命与传统的桌面应用程序相比缩短了,即使不是为了美观而重新设计也需要为了保持可用性维护和修改。

    有了上述两方面的讨论,我们再来比较基于请求(以Java语言为例)和基于组件两种框架。在概述一节里,已经提到两者的差异主要是在视图技术上。前者的视图是由代码组成的连续体,HTML展示网页的静态部分,嵌入的Java计算动态的内容。一个JSP页面本质上和一个HTML页面是相同的,如果说浏览器接收到的HTML页面是最终的成品,JSP页面则是待加工的半成品。在近年来随Ajax出现的极端情况下,页面完全由HTML、CSS和Javascript构成,动态的部分依靠Ajax获取服务器返回的数据后依靠Javascript拼装而成。后者则将视图看作多个边界清晰的组件嵌套而成的树结构,是对HTML页面的包装和抽象,页面某一段HTML只是对应组件的特定方法(不妨称之为render)输出的字符串。正是由于多了这一层包装,在render方法里编写HTML、CSS和Javascript比在一个文本文件里编写更复杂冗长。对于一次性编写,反复使用的组件,这本不是大问题。麻烦在于前面说过作为最终产品的前端代码因为种种原因是频繁需要更改和升级的,一个Visual Basic的控件可以稳定使用很多年,一个JSF的服务器端组件则需要靠打修复包和版本升级来延长生命。改动一个组件自然比修改一个文本文件成本高。至此只是站在组件开发者的角度,对于普通的web开发人员,本来只需要了解简单组件的用法和特性,如果发现组件功能上有bug,那想要自己改正的难度就比应用基于请求的框架的情况下难得多,这时不仅要精通基于请求框架的底层的(underlying)概念和技术,还要掌握所用的基于组件框架的内部知识。

    选择

    基于请求的和基于组件的两种框架各有优劣。虽然一眼看上去后者有很大的吸引力,普通的web开发人员只要使用专门的公司或开源组织提供的组件就可以轻松开发出好用漂亮的界面,但是有几种因素综合起来不利于这种理想中的方案。要编写一个没有潜在问题的、跨浏览器的、显示美观并且有足够灵活性可以调整的服务器端组件是需要高水平的技能、丰富的经验和较多时间的,即使付出这些成本,也不能完全避免使用者失望的情况。

    综合来看,基于请求的框架要程序员自己动手的地方比较多,但也因此可以更精细地控制HTML、CSS和Javascript这些最终决定应用程序界面的代码,特别是如果要在界面上有创新,尝试新的视觉效果和用户操作,必然选择基于请求的框架。基于组件的框架可以提高开发界面的效率,前提是选用的组件质量优秀。

    展开全文
  • 部门表: 课程表: 查询结果结构: 数据结构分析,部门分为部门id和部门名称;...Winform采用treeview递归生成目录树 using System; using System.Collections.Generic; using System.Component...

    部门表:
    这里写图片描述
    课程表:
    这里写图片描述
    查询结果结构:
    这里写图片描述
    数据结构分析,部门分为部门id和部门名称;课程分为课程id,课程名称,课程路径和课程所属部门。
    要求以部门为父节点展示不同部门下的课程。
    这里写图片描述

    Winform采用treeview递归生成目录树

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    private void AddTree(int d_id, DataTable dt, TreeNode PNode)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dr["Dept_name"].ToString();
                    node.Name = dr["Dept_id"].ToString();
                    if (treeView1.Nodes.Count == 0)
                    {
                        treeView1.Nodes.Add(node);
                        treeView1.ExpandAll();
                    }
                    else
                    {
                        int count = treeView1.Nodes.Count - 1;
                        System.Diagnostics.Debug.WriteLine("TreeView1_Node = " + treeView1.Nodes[count].Name);
                        if (!treeView1.Nodes[count].Name.Equals(node.Name))
                        {
                            treeView1.Nodes.Add(node);
                            treeView1.ExpandAll();
                        }
                    }
                    DataView dv = new DataView(dt);
                    dv.RowFilter = "Dept_id = " + dr["Dept_id"].ToString();
                    foreach (DataRowView drv in dv)
                    {
                        TreeNode childNode = new TreeNode();
                        childNode.Text = drv["Course_name"].ToString();
                        childNode.Name = drv["Course_id"].ToString();
                        childNode.Tag = drv["Course_path"].ToString();
                        System.Diagnostics.Debug.WriteLine("childNode_Tag = " + childNode.Tag);
                        node.Nodes.Add(childNode);
                        treeView1.ExpandAll();
                    }
                }
            }

    webform采用treeview递归生成目录树

    private void AddTree(int d_id, DataTable dt, TreeNode PNode)
    {
                foreach (DataRow dr in dt.Rows)
                {
                    //新建节点
                    TreeNode node = new TreeNode();
                    //给当前节点赋值
                    node.Text = dr["Dept_name"].ToString();
                    node.Value = dr["Dept_id"].ToString();
                    //判断当前是否存在根节点,不存在根节点,直接添加
                    if (TreeView1.Nodes.Count == 0)
                    {
                        TreeView1.Nodes.Add(node);
                        node.Expanded = true;
                    }
                    else
                    {
                        int count = TreeView1.Nodes.Count - 1;
                        System.Diagnostics.Debug.WriteLine("TreeView1_Node = " + TreeView1.Nodes[count].Text);
                        //判断treeview中是否已经存在当前结点(node.text),不存在则添加,已经存在则不添加
                        if (!TreeView1.Nodes[count].Text.Equals(node.Text))
                        {
                            TreeView1.Nodes.Add(node);
                            node.Expanded = true;
                        }                  
                    }
                    DataView dv =  new DataView(dt);
                    //过滤得到按部门id分类的结果集
                    dv.RowFilter = "Dept_id = " + dr["Dept_id"].ToString();
                    //遍历过滤后的结果集
                    foreach (DataRowView drv in dv  )
                    {
                        //新建子节点
                        TreeNode childNode = new TreeNode();
                        //childNode.Text = dt.Rows[i]["Course_name"].ToString();
                        //childNode.Value = dt.Rows[i]["Course_id"].ToString();
                        //childNode.NavigateUrl = dt.Rows[i]["Course_path"].ToString();
                        childNode.Text = drv["Course_name"].ToString();
                        childNode.Value = drv["Course_id"].ToString();
                        childNode.NavigateUrl = drv["Course_path"].ToString();
                        //将子节点添加到当前父节点下
                        node.ChildNodes.Add(childNode);
                    }
                }
    
            }
    展开全文
  • web服务发送接受协议SOAP/HTTP

    千次阅读 2016-12-18 10:07:51
    原文地址:【WebService】web服务发送接受协议SOAP/HTTP作者:橘子ivy的世界 一、web服务发送接受协议SOAP/HTTP GET/HTTP POST 在web服务,有三可供选择的发送和接受信息的协议:SOAP...
  • WEB客户端发送给WEB服务器的HTTP请求消息分为三个部分: 请求行 POST /demo/login HTTP/1.1 请求消息头 消息正文(也叫实体内容) username=xxxx&password=1234 HTTP请求消息的请求行包括请求方式、资源路径和...
  • Java Web中表单数据的获取

    万次阅读 2016-05-12 19:28:30
    1、 表单,是一可以由用户输入,并提交给服务器端的一个图形界面,有如下性质: (1)表单可以输入一些内容,这些输入功能由控件提供,叫做表单元素 2、提交的数据类型 分为单一表单数据和捆绑表单数据,其中...
  • web打印的几方案

    万次阅读 2017-10-27 11:21:35
      -------------------------------------------一 基于Web的打印方案比较分析--------------... 基于web的套打,难度在于要将浏览器呈现的html,精确地打印到票据,而且能够实现对分页位置的控制。下面就ie浏
  • J2EE web项目路径问题

    千次阅读 2012-08-22 17:25:11
    Java使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源...
  • Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法 1. 确保 project->build automatically 已经被选上. 2. 如果选上了,也不好使, 使用这一招: project->clean..->选第2个c
  • 缺省配置Springboot Web应用的SpringMVC DispatcherServlet,从整个应用开始启动到最终处于服务请求的状态,粗略地讲,可以分为两步 : 缺省配置Springboot Web应用启动过程SpringMVC DispatcherServlet的...
  • Web基础(三)Python Web

    千次阅读 多人点赞 2018-11-14 19:11:49
    文章目录Python Web基础1. WSGI1.1 概述1.2 实现原理1、WSGI Server/gateway2、WSGI Application3、WSGI MiddleWare1.3 测试 WSGI服务器代码简析1.4 实现WSGI服务器1.5 生产环境Web服务器[Gunicorn]...
  • Java Web项目解决中文乱码方法总结

    万次阅读 多人点赞 2016-09-07 15:32:40
    java web中乱发分析+解决方案
  •  应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览 器端/服务器端应用程序,这类应用程序一般借助浏览器来运行。  Web应用程序一般是B/S模式。Web应用程序...
  • Java或Web中解决所有路径问题

    千次阅读 2011-08-26 12:27:34
    Java使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源...
  • Web负载均衡的几实现方式

    万次阅读 多人点赞 2014-04-23 12:09:12
     负载均衡(Load Balance)是集群技术(Cluster)的一应用。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。目前最常见的负载均衡应用是Web负载均衡。根据实现的原理不同,常见的web负载均衡...
  • Go实战--golang使用JWT(JSON Web Token)

    万次阅读 多人点赞 2019-07-18 19:33:38
    实战–go使用cookie今天就来跟大家简单介绍一下golang如何使用token,当然是要依赖一下github上的优秀的开源库了。首先,要搞明白一个问题,token、cookie、session的区别。token、cookie、session的区别Cookie ...
  • 移动web中的常用技术选型

    万次阅读 2020-05-31 16:18:32
    我们在开发移动端网页时,由于手机屏幕尺寸的不同,需要一些适配方案以达到界面自适应的效果,这里记录一下移动web开发的一些基本概念和常用适配方案,先了解一下视口的概念: 一、视口(viewport). 视口是指浏览器显示...
  • C#开发的程序大致分为4类型

    千次阅读 2017-01-13 14:55:44
    谈到C#,不得不提.Net,Microsoft .NET Framework是微软的一套框架。 从XP的1.0版,到Win7的3.5版,到了Win8和Win8.1已经4.5和4.5.1版本....NET Framework 的目的就是要让建立Web Services 以及因特网应用程序的工
  • 用Tomcat构建WEB站点

    千次阅读 2012-10-15 19:58:29
    第1讲 用Tomcat构建WEB站点 ...应用程序:指允许用户执行特定任务的软件程序,主要分为桌面应用程序和Web应用程序两种类型。 桌面应用程序(DesktopApplication):一般是指采用客户机/服务器结构(Client/Server
  • Web服务的几实现方法

    千次阅读 2008-12-14 22:18:00
    首先,有人可能要问,对RPC和Document wrapped风格的服务来说,我们毕竟只关心要交换消息及它们的WSDL,而不去管它是RPC还是Document风格,所以从这方面说,这两种方法差别不大。实际上,它们之间的差别不在于实际...
  • zabbix agent 的两种安装方式

    万次阅读 2018-08-29 09:35:17
     zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。  zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/...
  • 通过 HTML5 的 socket API 实现 Native Code 与 Web 页面的通信。
  • 手机web前端调试页面的几方式

    万次阅读 2019-07-18 00:20:56
    PC端web页面调试比较容易,这里主要说几移动端调试的方法,从简单到复杂、从模拟调试到远程调试,大概分为几部分: 1、Chrome DevTools(谷歌浏览器)的模拟手机调试 2、weinre(web inspectorremote)远程调试...
  • 在开发我们经常看到两种路径的写法,很多同志不明白java的文件路径这两种写法区别。 关于路径有以下几点说明: linux和unix的路径一般用左斜杠(/) web应用因为最先使用在Unix系统上面,所以目前所有的网络...
  • web页面参数的传递方法

    千次阅读 热门讨论 2015-07-05 20:00:13
    web页面参数的传递方法多样,主要有以下几: Viewstate,Querystring,Session, Application,Cookie,Cache。
  • Model1设计模式,主要分为两层,视图层和模型层。那 么,项目的业务流程该如何处理呢?实际上,Model1模式就充当了这个角色,也就是说一切的业务逻辑都是由 JSP来处理的,通常是通过JSP直接调用模型
  • Eclipse的静态和动态web项目

    万次阅读 2015-03-31 16:29:23
    那么这两种有什么区别呢?其实这里的Dynamic和Static是通过页面来区分的。创建的页面只能是静态的就叫作静态web项目,而创建的页面是动态的(有数据变化)就叫做动态web项目。 1. Static Web Project ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 311,303
精华内容 124,521
关键字:

web中的目录分为两种