程序员应该选择java还是c#?

程序员应该选择java还是c#?,第1张

java还是c#?其实这不应该是我们真正的主题,而且入了行的也很少会java还是c#这么比,但初学的,java和c#往往就代表了两大流派,java代替了j2ee,c#代替了net,ok,没有关系,这么作为title,不影响我们说事。如果从语言的角度上来讲,c#毫无疑问胜出,易用、门槛低、优雅、较为简洁。但java和c#的语言特性是相似的。在很多类的命名上,它们都如出一辙:

//javaSystemoutprintln("java比C#强!j-a-v-a!");

//C#SystemWriteLine("你没看到#是4个+吗,我比c++还强2个+,你就歇菜吧!");

c#出现的时间比java晚,所以自然吸收、借鉴,同时又有它的创新,比如很早就支持lamda表达式、比如event和委托,比如var,比如linq。但如果从面向接口来讲,java同样可以做到event和listener,只不过对象引用的传递比较直接。而Net的类库和jdk则各有千秋。

如果从应用的角度来看,javaee和Net体系几乎都涵盖了主流的开发方向:桌面、Web、服务端、数据库、网络、移动端、中间件。哪个方向,哪个更强?这个留给读者自己体会吧。

微软给Net一个宇宙最强的IDE,也给了各个方向统一而平滑的编程体验,不得不说,微软的上手要容易的多。

而java则一开始就和开源分不开,多如牛毛的框架、引擎、包,blabla,用java开发,程序员要懂得东西更多一些。应为你大部分情况下得自己整合。但整合的好了就是很强大的,比如SSH。

在近几年很热的大数据和云计算领域,hadoop、spark、tez、leveldb、mongodb、mariadb、hive、hbase,还有oracle,都各自在自己不同的层面发力,大部分的这些都对java是极为友好的。

很多java程序员,都觉得搞net开发的,就是拖拖控件而已,其实我可以告诉你,说出这种话的java程序员一般都还比较小白,如果你是搞net的,你也可以说搞java的都是拷贝别人的开源软件的代码,然后改改而已。

当然改改没什么问题,谁都不喜欢重复造轮子,比如,google里面也并非全部是创新,经常”拿“别人的东西自己改吧改吧,淘宝就很不用说了,招了一些能改c、会点编译的程序员,经常拿各种开源框架开刀,然后表明是自己的东西。比如双11的那个问题。

当然不是说淘宝找的人有问题,而是这个企业的文化就是销售和广告文化,后来的google也如此。

回到正题,wpf和silverlight(虽然已经EOL)中最大的创新莫过于xaml技术,如果你认为wpf只是winform的简单升级,或者说你只会在wpf中拖控件,说明你还是一个非常初级的net程序员,不管你工资上w没有,或者你已经是项目经理了。

xaml天生就是为mvvm模型而生,这一点,搞前端的同学,应该熟悉,即使你不懂wpf,js和html怎么做mvvm,你也应该体会过它的好处。

wpf中在xaml中布局控件,并支持INotifyPropertyChanged接口,可以非常容易的实现界面和数据分离,做出一个mvvm模型出来。

说到标记性语言,我们看看jsp的jstl、struts2的tags,还有aspnetmvc3之后的razor引擎:

jstl和aspx的标签类似,自由、强大,可以很容易的穿插交织到html标记中;

struts的标签就是个另类,我个人反感这种既不遵循主流标准也不简洁的东西,虽然好多人会说好用,那是个习惯问题,我这么说,不是说这东西难学难掌握,只是比较一下和razor引擎中的标签语法,弱爆了。

razor,强大、简洁、优雅。

你肯定觉得我是微软net的粉丝,其实我想告诉你的是,最强的标签语言只有两种,html和xml,穿插动态语句到服务端页面上,然后刷出html,从来都不是好的做法,因为不只你一个人写代码,后面可能会有其他人维护这个页面,本来这是需要由webdesigner来做的事情,但是有了语句,他的维护成本就很高。

规范的页面开发,程序员是不会染指一个css、style的,动态语言在aspx、view、jsp上面应该尽量少用。否则你不如使用php和asp。这一点,你会在工作中会深有体会的。

青春的你,怎么选择?

看看现在的招聘吧,动不动就是

精通j2ee,精通struts、springmvc、hibernate或者mybatis,对mysql、oracle有深入理解,精通webservice、精通多线程,能处理高并发,有的还得懂jvm,最好有hadoop等开发经验。最后再来个211以上。

net方面呢?

精通Net,精通mvc3-5、精通wpf、wcf、多线程,mssql等等等等。

我现在处于离职状态,所以每天收到猎聘上的一些推荐,都很郁闷,因为没有一项是我精通的。

但是不妨碍我在2012年实习中,就拿到了13K的月薪,比一些正式员工可能还要高。

而且,仔细想想,代码中经常讲到要容易维护、这个设计模式、那个AOP,这个大并发,那个高性能,我个人没有见到容易维护的代码。学习一个新公司的一套模式,一套老产品,比学习一门新技术需要的时间长得多,你会发现,99%的情况下,你最需要的,不是什么代码,模式,而是对产品的理解、对业务的理解,很多情况下,除非太菜太小白,大家的代码都差不多,谁有时间重构代码?程序员又为何加班?

这是行情,一个项目接一个项目,公司需要挣钱的,这是大部分公司的现状。

一些疑问

访问数据库,随便找个高效的connector或者driver就行了,一般提供数据的厂家,谁不提供connector?ORM是很必要,但是追求性能和反框架泛滥的公司不在乎ORM带来的那点便利性,用一个jdbc+sql照样写稳定高效的数据访问。

做web前端,真的需要自己写一个框架出来?真正需要这种开发的项目有几个呢?jQuery和d3,原生的javascript就够了,你写的也许不叫框架,最多就是个wrapper。

数据库的唯一性索引、聚合索引、辅助索引都没搞清楚,就开始搞hadoop、spark、hbase、mongodb,用人单位也一再这么要求的,你的项目中真的有那么大的数据量?在传统的rdbms下解决不了?

你开始知道轮子的概念了,并且知道不要重复造轮子。可是你快不是程序员了,而是框架员了。

所以,回到java还是c#,这个问题,要比我遇到的技术分裂要简单的多。

我的意见是,忘记java或者c#的对立,如果要做一个开心、有自我追求、同时满足就业的程序员,你需要重视以下方面:

 

1函数调用栈,这个很多高级程序员只知其然不知其所以然。你可以不懂的汇编、函数入口、返回地址、寄存器,但你需要调试,你得深刻理解函数调用栈,无论是在dev模式调试struts开发的jsp页面,还是debug模式调试aspx页面,你得看懂调用栈的信息;

2基本的数据结构和算法,数据库中索引的组织方式,是B+树还是Hash,还是堆,你的公司有Web、桌面、移动用户,有社区,有产品,你可能要做个推荐什么的,或者研究个社交图谱什么的,这门技术可以帮助你。

3一门动态语言。lua、python、javascript,都可以,你需要随时和系统进行交互,或者实现一个原型,或者用程序的方式来画点界面、数据图什么,它们够轻量、够快捷 

4一门重量级语言。比如java或者c#。你靠它们吃饭。

5理解跨平台的含义。掌握一些基本的跨平台技术,比如xml、c、html、json。

6重视网络编程的练习和理解,在你使用URLConnection或者MySqlConnection或者WebRequest的时候,你是否理解它们的生命周期和底层实现,用什么语言无所谓,你要记住tcp/ip协议和http的基本特性。这样不至于你写了几年程序,还不知道method=post是什么原理。

7找一个顺手的IDE,我个人不是CLI控,虽然不得不CLI,一个顺手的IDE真的可以提高生产效率。搞Net推荐vs+resharper,搞java推荐intellijIDEA  

8关注一些热门而经典的领域,比如机器学习、图像处理、数据挖掘,即使已经有了mahout,不代表你不需要了解这些领域,你可能永远不会在工作中使用它们,但它们的思想值得你拥有,因为你选择了做程序员,而不是哪个公司的程序员。 

剩下的,就是你的解决问题的思路和你实现的硬功夫(编码能力),我相信,很多看这篇文章的人,不能够轻易写出一个ftp服务器,不能够不参考、不联网查询资料写出一个简单的快速排序,也不能够轻易写出一段通用分页SQL,但他们依然可以正常工作。

所以外面的功夫容易忘记,有网络就能拾起,内功才是入骨的东西

1、并发用户500以下:

单服务器方案可以满足应用要求,根据具体的并发用户数,可以选择IBM SYSTEM X3200 X3400 X3600等配置级别的服务器。下面列举出IBM SYSTEM X3400系列服务器配置及负载承受水平。

外形/高度

塔式/5U

处理器(最多) 双核 Intel®Xeon®处理器 5130(最高主频 30 GHz,最高前端总线速度1333 MHz)或者四核 Intel Xeon 处理器 E5320(最高主频 186 GHz)

处理器数量(标配/最大) 1/1

L2缓存 4MB(双核)或 2x4MB(四核)

内存(标配/最大) 1GB/32GB 全缓冲 DIMM 667MHz(通过 8个 DIMM 插槽)

扩展插槽 3个 PCI-Express、2个 PCI-X 和 1个 PCI

磁盘托架(总计/热插拔) 4/0或 8/8(因型号而异)

最大内部存储量 40TB热插拔SATA、24TB 热插拔SAS或20TB易插拔SATA

网络接口 集成的千兆以太网

电源(标配/最多) 670W 1/1或 835W 1/2

并发用户如果在100多的话建议可以考虑5000左右配置的电脑·就可以满足需求了

如果是tcp client用同一个本地端口去连不同的两个服务器ip,连第二个时就会提示端口已被占用。但服务器的监听端口,可以accept多次,建立多个socket;我的问题是服务器一个端口为什么能建立多个连接而客户端却不行呢?

TCP server 可以,TCP client 也可以。一个套接字只能建立一个连接,无论对于 server 还是 client。

注意报错消息是:

[Errno 106] (EISCONN) Transport endpoint is already connected

man 2 connect 说得很清楚了:

Generally, connection-based protocol sockets may successfully connect() only once; connectionless protocol sockets may use connect() multiple times to change their association

就是说,TCP 套接字最多只能调用 connect 一次。那么,你的监听套接字调用 connect 了几次?

来点有意思的。

一个套接字不能连接两次,并不代表一个本地地址不能用两次,看!加粗文字加粗文字

>>> import socket

>>> s = socketsocket()

# since Linux 39, 见 man 7 socket

>>> ssetsockopt(socketSOL_SOCKET, socketSO_REUSEPORT, 1)

>>> s2 = socketsocket()

>>> s2setsockopt(socketSOL_SOCKET, socketSO_REUSEPORT, 1)

>>> sbind(('127001', 12345))

>>> s2bind(('127001', 12345))

# 都可以使用同一本地地址来连接哦

>>> sconnect(('127001', 80))

>>> s2connect(('127001', 4321))

>>> netstat -npt | grep 12345

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all)

tcp 0 0 127001:4321 127001:12345 ESTABLISHED 18284/python3

tcp 0 0 127001:12345 127001:4321 ESTABLISHED 4568/python3

tcp 0 0 127001:80 127001:12345 ESTABLISHED -

tcp 0 0 127001:12345 127001:80 ESTABLISHED 4568/python3

你们这些有女友的都弱爆了啦 :-(

更新:大家来玩 TCP: 一个人也可以建立 TCP 连接呢 - 依云's Blog

2015年08月19日回答 · 2015年08月19日更新

依云211k 声望

答案对人有帮助,有参考价值1答案没帮助,是错误的答案,答非所问

内核是以一个(著名的)5元信息组来标识不同的socket的:源地址、源端口、目的地址、目的端口、协议号。任何一个不同,都不叫“同一个socket”。

2015年08月20日回答

sched_yield80 声望

答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

首先,TCP链接是可靠的端对端的链接,每个TCP链接由4个要素组成:2组IP地址(本地和远端),2组端口地址(本地和远端)。其中如果需要跟端口信息绑定时,都需要调用bind函数,如果server端针对2个同样的IP、端口组进行同样的绑定时,第2次同样是不成功的。

2015年08月16日回答

charliecui24k 声望

答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

有个相关的问题: ftp的数据传输,服务器会用20端口主动连接客户端,如果两个客户端同时在一下载东西,那ftp 服务器能用20端口去连接两个ip ?(这时ftp的服务器其实是tcp里的客户端)

2015年08月16日回答

编辑

hyanleo163 声望

+1

能啊,看我的实验。

依云 · 2015年08月19日

不管是服务器还是客户端,建立TCP链接,同一个端口都只能使用一次。

这句话其实是错的!

对于TCP协议,要成功建立一个新的链接,需要保证新链接四个要素组合体的唯一性:客户端的IP、客户端的port、服务器端的IP、服务器端的port。也就是说,服务器端的同一个IP和port,可以和同一个客户端的多个不同端口成功建立多个TCP链接(与多个不同的客户端当然也可以),只要保证Server IP + Server Port + Client IP + Client Port这个组合唯一不重复即可。

> netstat -a -n -p tcp |grep 9999

tcp 0 0 127001:51113 127001:9999 ESTABLISHED 2701/nc

tcp 0 0 127001:51119 127001:9999 ESTABLISHED 2752/nc

上述结果127001:9999中9999端口成功建立两个TCP链接,也就可以理解。

客户端发送TCP链接请求的端口,也就是后续建立TCP链接使用的端口,所以一旦TCP链接建立,端口就被占用,无法再建立第二个链接。

而服务器端有两类端口:侦听端口 和 后续建立TCP链接的端口。其中侦听端口只负责侦听客户端发送来的TCP链接请求,不用作建立TCP链接使用,一旦侦听到有客户端发送TCP链接请求,就分配一个端口(一般随机分配,且不会重复)用于建立TCP链接,而不是所说的服务器一个端口能建立多个连接。

上述描述也比较片面,客户端如何请求及建立链接,服务器端如何侦听及是否分配新随机端口等应该都可以在应用层面进行控制,所以上述描述可以作为建立TCP链接的一种方式,仅供参考。

一些英文的参考:

How do multiple clients connect simultaneously to one port, say 80, on a server

TCP : two different sockets sharing a port

------------------------------------------------------------------------------------

提升linux下tcp服务器并发连接数限制 2012-12-02 20:30:23

1、修改用户进程可打开文件数限制

在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:

[speng@as4 ~]$ ulimit -n

1024

这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听 socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。

对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。

修改上述限制的最简单的办法就是使用ulimit命令:

[speng@as4 ~]$ ulimit -n

上述命令中,在中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。

第一步,修改/etc/security/limitsconf文件,在文件中添加如下行:

speng soft nofile 10240

speng hard nofile 10240

其中speng指定了要修改哪个用户的打开文件数限制,可用''号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。

第二步,修改/etc/pamd/login文件,在文件中添加如下行:

session required /lib/security/pam_limitsso

这是告诉Linux在用户完成系统登录后,应该调用pam_limitsso模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limitsso模块就会从/etc/security/limitsconf文件中读取配置来设置这些限制值。修改完后保存此文件。

第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:

[speng@as4 ~]$ cat /proc/sys/fs/file-max

12158

这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)12158个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rclocal脚本,在脚本中添加如下行:

echo 22158 > /proc/sys/fs/file-max

这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。

完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用 ulimit- n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit-n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次ulimit-n 设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了 ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。

通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。

2、修改网络内核对TCP连接的有关限制

在Linux上编写支持高并发TCP连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法成功建立新的TCP连接的现象。出现这种现在的原因有多种。

第一种原因可能是因为Linux网络内核对本地端口号范围有限制。此时,进一步分析为什么无法建立TCP连接,会发现问题出在connect()调用返回失败,查看系统错误提示消息是“Can't assign requestedaddress”。同时,如果在此时用tcpdump工具监视网络,会发现根本没有TCP连接时客户端发SYN包的网络流量。这些情况说明问题在于本地Linux系统内核中有限制。其实,问题的根本原因在于Linux内核的TCP/IP协议实现模块对系统中所有的客户端TCP连接对应的本地端口号的范围进行了限制(例如,内核限制本地端口号的范围为1024~32768之间)。当系统中某一时刻同时存在太多的TCP客户端连接时,由于每个TCP客户端连接都要占用一个唯一的本地端口号(此端口号在系统的本地端口号范围限制中),如果现有的TCP客户端连接已将所有的本地端口号占满,则此时就无法为新的TCP客户端连接分配一个本地端口号了,因此系统会在这种情况下在connect()调用中返回失败,并将错误提示消息设为“Can't assignrequested address”。有关这些控制逻辑可以查看Linux内核源代码,以linux26内核为例,可以查看tcp_ipv4c文件中如下函数:

static int tcp_v4_hash_connect(struct sock sk)

请注意上述函数中对变量sysctl_local_port_range的访问控制。变量sysctl_local_port_range的初始化则是在tcpc文件中的如下函数中设置:

void __init tcp_init(void)

内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。

第一步,修改/etc/sysctlconf文件,在文件中添加如下行:

netipv4ip_local_port_range = 1024 65000

这表明将系统对本地端口范围限制设置为1024~65000之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。修改完后保存此文件。

第二步,执行sysctl命令:

[speng@as4 ~]$ sysctl -p

如果系统没有错误提示,就表明新的本地端口范围设置成功。如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。

第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制。此时程序会表现为在 connect()调用中阻塞,如同死机,如果用tcpdump工具监视网络,也会发现根本没有TCP连接时客户端发SYN包的网络流量。由于 IP_TABLE防火墙在内核中会对每个TCP连接的状态进行跟踪,跟踪信息将会放在位于内核内存中的conntrackdatabase中,这个数据库的大小有限,当系统中存在过多的TCP连接时,数据库容量不足,IP_TABLE无法为新的TCP连接建立跟踪信息,于是表现为在connect()调用中阻塞。此时就必须修改内核对最大跟踪的TCP连接数的限制,方法同修改内核对本地端口号范围的限制是类似的:

第一步,修改/etc/sysctlconf文件,在文件中添加如下行:

netipv4ip_conntrack_max = 10240

这表明将系统对最大跟踪的TCP连接数限制设置为10240。请注意,此限制值要尽量小,以节省对内核内存的占用。

第二步,执行sysctl命令:

[speng@as4 ~]$ sysctl -p

如果系统没有错误提示,就表明系统对新的最大跟踪的TCP连接数限制修改成功。如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立10000多个TCP客户端连接。

3、使用支持高并发网络I/O的编程技术

在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。

可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步I /O 是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。

从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分 TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期 Linux内核的AIO技术实现是通过在内核中为每个I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。

综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。

在不使用代理服务器的情况下,用户使用网络浏览器直接连接其他Internet站点取得网络信息时,须发出请求信号来得到回答,然后对方再把信息以数据流方式传送回来。

有了代理服务器之后,浏览器向代理服务器发出请求,当代理服务器接收请求信息号,再由代理服务器来取回浏览器所需要的信息并传送给终端用户的浏览器。代理服务器的作用如下。

1、共享网络

如通过Squid、sygate、wingate、isa、ccproxy以及NT系统自带的网络共享等代理服务器访问外部站点的信息。这些代理服务器也都能提供企业级的文件缓存、复制和地址过来等服务。

充分利用局域网出口的有限带宽,加快内网用户的访问速度,能解决仅仅有一条线路一个公有IP,在这种公有IP资源严重不足的情况下,满足局域网众多用户同时共享上网的需求。

2、访问代理

现在的网络环境中常常会出现网络拥挤或网络故障。用户通常都会通过代理服务器绕道访问目的站点;另外,代理服务器中通常会备份有相当数量的缓存文件。

如果当前所访问的数据在代理服务器的缓存文件中,则可直接读取,而无需再连接到远端Web服务器。这样可以达到加快访问网站速度,节约通信带宽的目的。

3、提高速度

提高下载速度,突破一个IP、一个下载线程的限制以及电信和联通的用户互上对方的**网站下载的限制。

4、突破限制

互联网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内。

那么客户通过代理服务器访问目标网站就成为可能。通过代理服务器,国内高校使用教育网就能实现访问因特网,这就是高校内代理服务器流向的原因所在。

5、防止攻击

通过代理服务器完成内部主机的访问使主机地址等信息不会发送到外部,隐藏了自己的真实地址信息,还可隐藏自己的IP。更有效地保护了内部主机。

6、充当防火墙

因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽某些信息。

7、方便对用户管理

通过代理服务器,管理员可以设置用户验证和记账功能,对用户进行登记,并对用户的访问时间、访问地点、信息浏览进行统计。没有登记的用户无权通过代理服务器访问Internet

8、隐藏身份

代理服务器使用内部用户访问Interner时受到保护,内部网的用户要对外发布信息就需要使用代理服务器的反向代理功能。这样就不会影响到内部网络的安全性能,起到隐藏身份的目的。

扩展资料:

代理服务器使用特点:

代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给浏览器。

而且,大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据。

而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率(速度会随着代理服务器地理位置的不同以及网络传输情况而改变),而且国外的网络大部分都是没有限制访问网站或者所限制的不同,所以我们有很大的机会通过代理服务器去访问那些原本不能够去的网站。 

更重要的是:Proxy Server (代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI) 模型的对话层。

-代理服务器

日常网络中有很多用途,这里把我们所熟悉的一些作用总结和分析一下,分类说明:

一、共享网络

最常见的可能是用代理服务器共享上网,很多人不知不觉中就在用,比如通过sygate,wingate,isa,ccproxy,NT系统自带的网络共享等,可以提供企业级的文件缓存、复制和地址过滤等服务,充分利用局域网出口的有限带宽,加快内网用户的 访问速度,可以解决仅仅有一条线路一个IP,IP资源不足,带局域网很多用户上网的功能,同时可以做为一个防火墙,隔离内网与外网,并且能提供监控网络和记录传输信息的功能,加强了局域网的安全性,又便于对上网用户进行管理。

二、访问代理

加快访问网站速度,在网络出现拥挤或故障时,可通过代理服务器访问目的网站。比如A要访问C网站,但A到C网络出现问题,可以通过绕道,假设B是代理服务器,A可通过B, 再由B到C。大家还记得前几个月,有段时间网络不正常,基本访问不了外国网站,如GOOGLE,YAHOO, 甚至连CCF都访问不了,心里很着急。结果通过一个代理服务器,发现都可以访问,速度还不错,在这样的情况下,代理服务器就可以发挥很大的作用了。还有一类代理服务器备份有相当数量的缓存文件,如果我们当前所访问的数据在代理服务器的缓存文件中,则可直接 读取,而无需再连接到远端Web服务器。这样,加快了访问速度。

三、防止攻击

隐藏自己的真实地址信息,还可隐藏自己的IP,防止被黑客攻击。通过分析指定IP地址,可以查询到网络用户的目前所在地。例如,大家在一些论坛上看到,论坛中明确标出了发帖用户目前所在地,这就是根据论坛会员登录时的IP地址解析的。还有平日里我们最为常 用的显IP版QQ,在“发送消息”窗口中,可以查看对方的IP及解析出的地理位置。而当我们使用相应协议的代理服务器后,就可以达到隐藏自己当前所在地地址的目的了。

四、突破限制

代理服务器还可以突破网络限制。比如局域网对上网用户的端口,目的网站,协议,游戏,即时通讯软件等的限制,都可以突破这些限制,可参见我这篇帖子,如何突破局域网对上网用户的一些限制 不再重复。举个例子:GOOGLE我们都喜欢用,其实GOOGLE有一个功能就有点类似于代理服务器的功能,就是网页快照,现在网站经常发生变动,地址或者网站关了,网站服务器发生故障了,或者已经更新了,但我们仍然要查以前非常有用的资料,网页快照就排 上用场了,Google 以其复杂而全自动的搜索方法排除了任何人为因素对搜索结果的影响,保证了网页排名的客观公正,Google 可以方便、诚实、客观地帮您在网上找到有价值的资料。GOOGLE有一个海量的数据库,如果找不到服务器,Google 储存的网页快照也可救急。虽然网页快照中的信息可能不是最新的,但在网页快照中查找资料要比在实际网页中快得多,这时可以通过加密代理访问Google,再访问其网页快照来救急。

五、掩藏身份

代理服务器知识是黑客基本功,黑客的很多活动都是通过代理服务器, 比如扫描、刺探,对局域网内机器进行渗透,黑客一般攻击的时候都是中转了很多级跳板,才攻击目标机器。隐藏了身份,保证了自己的安全。

六、提高速度

提高下载速度,突破下载限制。比如有的网站提供的下载资源,做了一IP一线程的限制,这时候可以用影音传送带,设置多线程,为每个线程设置一个代理。对于限制一个IP的情况很好突破,只要用不同的代理服务器,就可同时下载多个资源,适用于从WEB和FTP 上下载的情况。不过如果是论坛里面的资源,每个用户一个账号,并且限制一账号一IP, 代理服务器就突破不了。还有一种情况,比如我们这里,电信的用户上不了联通的**网站,联通的用户上不了的电信**网站,这种情况只要电信的找一个联通地代理,IP地址属联通就行。联通找一个电信代理。就可以去**网站下载其**。教育网还可以通过代理服 务器可使无出国权限或无访问某IP段权限的计算机访问相关资源。

当然代理服务器还不止这些作用,例如可以攻击别人的机器啊,然后让别人找不到你,或者呵呵,你自己去想想吧!

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 程序员应该选择java还是c#?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情