WebService 与 Socket 区别
一、WebService
1.什么是WebService
Web Service(WEB服务)能够快捷和方便地综合结合各种系统、商务和任何应用平台。利用最新的Web Service 标准能够使任何软件系统和系统之间的应用互通互联,方便,而且更加廉价。
2.WebService的应用场合
(1)跨越防火墙通信
客户端和服务器端之间通信都会有防火墙或者代理服务器。传统的实现互相通信的方法是在分布式对象,如DCOM、CORBA之间进行相互的远程过程调用(TCP/IP),但在这种场合下HTTP协议的特性没有得到应用,因此在Internet环境下的远程过程调用不是一件容易的事情,同时在Internet上使用远程过程调用还存在安全问题,防火墙和代理服务器还有可能阻挡这种类型的数据传输。HTTP是在Internet上发送消息的标准协议。Web服务使用基于XML消息处理作为基本的数据通信方式,应用程序可以使用HTTP和XML消息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙。
(2)应用程序集成
企业里经常要把不同语言写成的在不同平台上运行的各种程序集成起来。大型公司常常有很多部门,每个部门都使用最适合自己特定需要的应用程序和平台。为了能够让公司各部门之间进行通信,首先应该将公司内部的应用程序和商业过程集成在一起。Web服务的开放标准使组织创建可重用的应用程序接口。当被包装成一个或一组Web服务之后,任何应用程序理论上都可以通过SOAP消息与任何其他应用程序进行通信。
(3)软件复用
软件复用是在软件开发中避免重复劳动的解决方案。Web服务实现了业务级别的软件复用,例如在B2B的集成中,各企业之间通过互相调用Web服务,实现了Web服务的共享,Web服务的使用企业不需要再重新开发其他企业中已经存在的服务。
二、使用Socket远程通信

1.客户端
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class WeatherClient{ public static void main(String[] args) throws UnknownHostException, IOException{ //1.创建Socket对象,和服务端建立连接 Socket socket = new Socket("127.0.0.1",12345); //2.发送城市名称 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF("北京"); System.out.println("请求查询天气: 北京"); //3.接受返回结果使用输入流 DataInputStream dis = new DataInputStream(socket.getInputStream()); String result = dis.readUTF(); System.out.println("北京的天气: " + result); //4.关闭流 dis.close(); dos.close(); }} |
2.服务端
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/* * 天气服务端 */public class WeatherServer{ public static void main(String[] args) throws IOException{ // 1.创建ServerSocket对象 ServerSocket serverSocket = new ServerSocket(12345); while(true){ // 2.等待客户端连接,阻塞的方法 final Socket socket = serverSocket.accept(); Runnable runnable = new Runnable(){ @Override public void run(){ try{ // 3.使用输入流接受客户端发送的请求 DataInputStream dis = new DataInputStream(socket.getInputStream()); String cityName = dis.readUTF(); System.out.println("接收到客户端发送的请求: " + cityName); Thread.sleep(1000); // 4.根据城市名查询天气 String result = "今天天气很热"; System.out.println("返回天气信息: " + result); // 5.返回查询结果,使用输出流。 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(result); // 6.关闭流 dis.close(); dos.close(); }catch(Exception e){ e.printStackTrace(); } } }; //启动线程 new Thread(runnable).start(); } }} |
结果:
请求查询天气: 北京
北京的天气: 今天天气很热
接收到客户端发送的请求: 北京
返回天气信息: 今天天气很热
三、用WebService实现远程调用
1.服务端
第一步: 创建一个java工程,不需要导入jar包。
第二步: 创建接口。在Webservice中叫做SEI(wsdl中叫做PortType)。
第三步: 创建实现类。需要在实现类上加一个@Webservice注解。
第四步: 发布服务。EndPoint.publish发布服务。
WeatherInterface.java

WeatherInterfaceImpl.java

WeatherServer.java

2.查看wsdl
a: 在地址栏输入(注意后面的参数?wsdl)
http://127.0.0.1:12345/weather?wsdl
b: Wsdl不是webService,只是获取一个用于描述WebService的说明文件

3.使用wsimport工具生成客户端调用代码


4.编写客户端
第1步:创建服务视图对象。
第2步: 从服务视图中获得PortType对象。
第3步: 调用PortType的方法(可以实现远程通信)
第4步: 接收方法的返回值(服务端响应的结果)。

四、WebService和Socket的对比
(1)Socket是基于TCP/IP的传输层协议。
Webservice是基于HTTP协议传输数据,http是基于tcp的应用层协议。
Webservice采用了基于http的soap协议传输数据。(2)Socket接口通过流传输,不支持面向对象。
Webservice 接口支持面向对象,最终webservice将对象进行序列化后通过流传输。
Webservice采用soap协议进行通信,不需专门针对数据流的发送和接收进行处理,是一种跨平台的面向对象远程调用技术。(3)Socket适用于高性能大数据的传输,传输的数据需要手动处理,socket通信的接口协议需要自定义。
比如:自定义一种字符串拼接的格式,比如自定义的xml数据,自定义麻烦之处在接口调用方和接口服务端需要互相讨论确定接口的协议内容,不方便。
缺点程序员需要自己去解析输入、输出流,解析发送和接收的数据。数据传输的格式不固定,需要程序员开发socket接口时自定义接口协议。
优点
如果要传输大数据量,socket可以满足,如果存在大并发使用socket也可以实现,程序用socket灵活性更大,比如可以socket的高并发框架mina开发。
Webservcie由于是遵循标准的soap协议,soap 协议的内容格式固定,soap协议传递的内容是xml数据,由于webservice是基于http的,所以简单理解为soap=http+xml,适用于没有性能要求情况下且数据传输量小,推荐在公开接口上使用webservice,因为soap协议的标准的。
优点
jaxws可以通过面向对象开发webservice,程序员不需要解析输入、输出流。
由于webservice传输数据使用标准的soap协议(基于http传输xml),soap协议已经被w3c管理了。
缺点如果传输大数据量,webservice不适用。如果webservice开发大并发的应用,webservice依靠web容器提高并发数。
WebService 与 Socket 区别的更多相关文章
- 网络协议TCP、Http、webservice、socket区别
网络协议TCP.Http.webservice.socket区别 http 和 webservice 都是基于TCP/IP协议的应用层协议 webservice是基于http的soap协议传输数据 w ...
- .Net remoting, Webservice,WCF,Socket区别
传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务& ...
- ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系
TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为: 对应 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ...
- 转:WCF、WebAPI、WCFREST、WebService之间的区别
WCF.WebAPI.WCFREST.WebService之间的区别 注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API ...
- 转--webservice、socket、http 小记(一)
webservice.socket.http 小记(一) http://blog.csdn.net/m_123hj_520/article/details/9370723 2013-07-18 17: ...
- TCP/IP协议原理与应用笔记07:HTTP、TCP/IP与socket区别
1. TCP/IP协议与HTTP协议区别: HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件 ...
- TCP,IP,HTTP,SOCKET区别和联系
物理层-- 数据链路层-- 传输层-- TCP协议 会话层-- 我 们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便 ...
- So easy Webservice 1.Socket建设web服务
socket 是用来进行网络通讯的,简单来说,远程机器和本地机器各建一个socket,然后通过该socket进行连接通讯 socket简单模型图: socket的原理图: 代码实现: 1.创建sock ...
- loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
使用loadrunner进行压力测试主要分两步,第一步是编写脚本(比较重点),第二步执行测试(配置都是在界面上点点就行了,当然我只的是比较简单的,能满足日常需要的),第三步分析结果(这一步比较高深,但 ...
随机推荐
- python 爬虫 处理超级课程表传输的数据
借鉴的别人的思路 http://www.oschina.net/code/snippet_2463131_53711 抓取超级课程表传输的数据 他的传输数据居然是明文的-- 现在已经把自己的课表都抓出 ...
- Codeforces Round #354 (Div. 2) B. Pyramid of Glasses 模拟
B. Pyramid of Glasses 题目连接: http://www.codeforces.com/contest/676/problem/B Description Mary has jus ...
- TensorFlow安装和HelloWorld
TensorFlow安装 TensorFlow可以在各种操作系统上面安装.安装的时候要注意TensorFlow的类型,一种是普通的版本,仅支持CPU,安装简单.另外一种类型带GPU的,可以利用GPU来 ...
- react父子组件数据传递
子传父 1.首先父组件设定一个自定义函数 getChildDatas = (values) => { //...业务代码 } 2.将该函数暴露在子组件的引用上 <Child getChil ...
- LAMP架构之NFS
需求分析: 前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器: 虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务 ...
- ActiveMQ Cluster (ActiveMQ 集群) 配置
构建高可用的ActiveMQ系统在生产环境中是非常重要的,对于这个apache的消息中间件实现高可用非常简单,只要在Apache ActiveMQ单点基本配置基础上做一次配置变更(如果在一台设备上部署 ...
- offsetLeft && left
/* function getCss(obj,attr){ return window.getComputedStyle ? window.getComputedStyle(obj,null)[att ...
- mysql---总体备份和增量备份
总体备份: 对整张表或者整个数据库甚至全部数据库进行备份. 增量备份: 对某一范围内的数据进行备份. 1.总体备份: 对表进行备份: 针对存储引擎为myisam的表,能够直接复制frm.myd.myi ...
- Struts2 无后缀action请求
如果将Struts2的filter-mapping配置成 <filter-mapping> <filter-name>struts2</filter-name> & ...
- C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...