About neohope

一直在努力,还没想过要放弃...

跨线程创建窗体的两种方法

1、利用新STA线程进行创建

//线程
private System.Threading.Thread th=null;

//创建线程
try
{
    th = new System.Threading.Thread((System.Threading.ThreadStart)delegate
    {
        Application.Run(new fmFreeChatClient(url));
    });

    th.SetApartmentState(ApartmentState.STA);
    th.Start();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

2、用delegate

//在form中声明
#region 新建Form并显示
delegate void showForm(string url);
public void showMyForm(string url)
{
//新建窗体并显示
}
#endregion

//在线程中调用
Object[] objs = new Object[1];
objs[0]="hello";
this.Invoke(new showForm(showMyForm),objs);

Mule自学笔记01

ESB是企业服务总线,故名思议,ESB是一个面向Service的超级Adapter。
其中,开源的ESB软件,比较出名的为Mule ESB和JBoss ESB。
Mule ESB 是开源ESB软件,分企业版(提供试用,价格不菲)和社区版(免费,开源CPAL协议)。

1、基础概念

1.1 Global Elements
Connectors:连接器,在远端服务和Endpoints之间保持联系。
Endpoints:输入或输出端,如HTTP,TCP,UDP,文件,数据等
Transformers:转换器,改变当前消息
Expressions:表达式,可以自定义。
Names and References:名字和参考,名字用于表示一个对象,参考用于在一个对象中引用其他对象

1.2Flows:流,控制信息流向
Endpoints:输入或输出端,如HTTP,TCP,UDP,文件,数据等
Transformers:转换器,改变当前消息
Message Enrichment:消息扩展
Logger:记录日志
Filters:过滤器,判断是否处理请求。
Routers:消息路由,用于拆分和拼装消息。

Components:控件,用Java或groovy等写的插件
Cloud Connectors:连接云服务
Processor Chain:消息处理链
Sub-flow:子消息流过程,类似于消息流的函数
Exception Strategies:异常处理策略

1.3 Configuration Patterns,分为四类
pattern:bridge 在输入及输出之间进行桥接,
pattern:simple-service 简单服务
pattern:validator 校验
pattern:web-service-proxy is a proxy for a web service.

1.4Service:旧特性,灵活性不是很好

1.5Custom Elements:自定义组件

1.6System-level Configuration:系统配置
Threading Profiles
Timeouts

1.7Managers有三类管理
Transaction manager
Security Manager
Notifications Manager

1.8Agents:有两类代理
Custom Agents
Management Agents

IIS文件上传大小限制

1、首先要修改IIS的配置
编辑文件C:\Windows\System32\inetsrv\config\schema\IIS_schema.xml

<!--修改下面一行,将上传大小调整为1G左右-->
<attribute name="maxAllowedContentLength" type="uint" defaultValue="1000000000" />

2、要调整项目配置
编辑文件Web.config

<configuration>
  <system.web>
    <!--增加下面一行,将上传大小调整为1G左右,上传超时调整为10分钟-->
    <httpRuntime targetFramework="4.5" maxRequestLength="1000000000" executionTimeout="600"/>
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

用VC编译Nginx

1、安装Mysis和VC
2、用svn从Nginx取回源代码
3、调用下面的bat

@call "D:\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
@call "D:\GNUstep\msys.bat"
cmd

4、Config

./auto/configure --prefix= --sbin-path=nginx --with-cc=cl --with-cc-opt="" --without-http_rewrite_module --without-http_gzip_module

5、Make

nmake

Nginx做负载均衡

只需要3步:

1、在nginx.conf中的http段增加upstream服务器

    upstream backend{  
        server 192.168.140.15:18080 weight=2;  
        server 192.168.140.81:18080;  
        server 192.168.140.82:18080;  
    }

2、在nginx.conf中的http段增加server

    server {
        listen       18080;
        server_name  localhost;

        location / {
            proxy_pass http://backend/;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

3、重启Nginx

正向代理和反向代理

1、forward proxy
正向代理是一个位于client和origin server之间的proxy,为了从origin server取得内容,client向proxy发送一个请求并指定目标(origin server),然后proxy向origin server转交request并将获得的resopnse返回给client。client必须要进行一些特别的设置才能使用正向代理。

2、reverse proxy
反向代理对于client而言就像是origin server,并且clinet不需要进行任何特别的设置。client向反proxy发送普通请求,接着proxy将判断向何处(origin server)转交request,并将response返回给client,proxy在client看起来就像origin server一样。

3、两者区别
从网络角色来讲:
正向代理隐藏的是client,clinet可以感觉到正向代理的存在,proxy对server隐藏了client的细节。
反向代理隐藏的是origin server,client感觉不到反向代理的存在,proxy对clinet隐藏了server的细节。

从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径,正向代理还可以使用缓冲特性减少网络使用率。
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问,反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

从安全性来讲:
正向代理允许client通过它访问任意网站并且隐藏client自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
反向代理对clinet都是透明的,clinet并不知道自己访问的是一个代理。

4、透明代理
透明代理技是指客户端感觉不到代理的存在,不需要在浏览器中设置任何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺省网关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器的代理端口,即由本地代理服务器向外请求所需数据然后拷贝给客户端。理论上透明代理可以对任何协议通用。一般透明代理用于防火墙技术比较多。

Nginx中的upstream

Nginx中upstream有以下几种方式:

1、轮询(weight=1)
默认选项,当weight不指定时,各服务器weight相同,
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream bakend {
server 192.168.1.10;
server 192.168.1.11;
}

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
如果后端服务器down掉,能自动剔除。
比如下面配置,则1.11服务器的访问量为1.10服务器的两倍。

upstream bakend {
server 192.168.1.10 weight=1;
server 192.168.1.11 weight=2;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
如果后端服务器down掉,要手工down掉。

upstream resinserver{
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}

4、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}

5、url_hash(第三方插件)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。
在upstream中加入hash语句,hash_method是使用的hash算法

upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
hash $request_uri;
hash_method crc32;
}

设备的状态有:
1.down 表示单前的server暂时不参与负载
2.weight 权重,默认为1。 weight越大,负载的权重就越大。
3.max_fails 允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout max_fails次失败后,暂停的时间。
5.backup 备用服务器, 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

Git02常用命令

1、设置个人信息

git config --global user.name "xxx"
git config --global user.email "xxx@xxx.xxx"

2、提交

#初始化本地git
cd hello-git
git init

#新建README文件
touch README
git add README

#提交文件到本地Git
git commit -m 'first commit'

#提交文件到远程Git
git remote add origin git@github.com:username/hello-git.git
git push -u origin master

3、取回

git clone git@github.com:username/hello-git.git

取回(包含子模块)

git clone --recursive -j6 git@github.com:username/hello-git.git

取回(包含子模块)

git clone git@github.com:username/hello-git.git
cd hello-git
git submodule update --init --recursive

4、Fork

#产生Fork后取回
git clone git@github.com:username/hello-git.git
cd hello-git

#追加上级代码信息
git remote add upstream git://github.com/SomeOne/hello-git.git
git fetch upstream
#合并上级代码
git fetch upstream
git merge upstream/master

5、创建分支

#创建分支
git checkout -b mybranch

6、合并分支

#合并分支
git checkout master
git merge mybranch
git branch -d mybranch

7、改变远程库地址

git remote set-url origin 新地址

JS中null与undefined

1.undefined是js的一个原始值,不是一个对象,表示变量没有初始化,
null也是js的一个原始值,不是一个对象,他表示变量为空,但由于语言设计的缺陷,导致typeof(null)为object,而正确的应该为null

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined); //true
alert(null == undefined);  //true

2.object == null 与 !object 是不同的,因为!object相当于!Boolean(object)

alert(Boolean(null)); //false
alert(Boolean(0));    //false
alert(Boolean(""));   //false
alert(Boolean({}));   //true
alert(Boolean([]));   //true