论坛首页 Java企业应用论坛

关于B/S和C/S的想法,兼谈web service

浏览 7489 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-24  
最近做的这个项目,是一个外线管理系统。

外线人员使用android应用与服务端进行交互,内线人员使用浏览器访问系统。服务端既提供了给浏览器访问的页面,也暴露了一些接口给智能手机调用。

我原本觉得,这理所当然是一个C/S架构的应用,Server是服务端,Client是我们开发的android应用。不过今天看了一些关于B/S和C/S比较的帖子,回头又想了想,发现我原来的理解貌似不对。因此把一些想法记录在这里,以后再回顾一下。如果有朋友知道答案,也希望能指教一下,谢谢。

首先,我突然有点疑惑什么是所谓的web service。像我们服务端提供了一个地址,比如说http://localhost:8080/service/accept.action。然后我们的终端应用访问这个地址,并且传递一些参数进来,系统后台就做了一些逻辑处理,数据库操作什么的,然后返回一个响应回到android终端。

这种形式和我以前做过的web service就不太一样。以前系统A发布了一个web service,然后系统B是根据系统A的WSDL,直接调用系统A发布的一些方法。我理解这样才像一个web service。

但是现在这种形式,我感觉效果和上面的例子也是一样的,服务端就是发布web service的系统A,终端应用就是系统B,虽然它没有看到什么WSDL,但是它只要知道http://localhost:8080/service/accept.action这个地址,和这个地址需要的参数,照样可以访问到,并且也能让系统A作逻辑处理,也能得到系统A返回的结果。虽然这种形式上不是web service,但是实际的效果和web service又有什么区别呢?如果是这样的话,那么什么又才是真正的web service呢?

关于这个问题,我感到很疑惑,希望知道的朋友能给我讲解一下。

扯完题外话,再说回B/S和C/S。我原本认为我们这个系统肯定是C/S结构的,现在想想也不对劲。

终端应用和服务端的交互有2种方式,一种是走http协议,也是发起请求、获得响应、断开连接;另一种是通过走短信网关的方式,发送短信、解析短信。这2种方式,终端应用和服务端都没有保持长连接。如果服务端想推送什么消息到终端的话,是要通过向目标手机号发送特殊格式短信的方式来实现的。但是真正的C/S架构,却是可以通过Socket之类的长连接来即时推送消息的。


不过除了这点以外,我们又确实需要:
1、同时维护服务端系统和终端应用
2、负责终端应用的分发和升级
3、保证终端数据和服务端数据的同步
4、可以在终端应用上进行比较多的业务逻辑

上面这些特征又类似于传统的C/S架构,所以我现在也有点迷糊,究竟如何区分所谓的B/S和C/S呢?至少我认为我们这个系统不是纯粹的C/S,但是又不能说是B/S。。。

其实想想,也不用这么拘泥这个划分。除非一个系统和外部系统一点关系没有(比如安装一个单机的连连看),就一定涉及到如下问题:
1、系统职责划分(业务逻辑分配的比重)
2、系统间通信(HTTP、Socket……)
3、系统间数据同步
4、系统一致性(服务端升级,客户端需要相应升级)
5、部署和维护的成本
6、……

或许所谓的B/S、C/S,之间不存在也没必要某种绝对的划分,只要能处理好上述这些问题就行了。比如我们这次的系统,就可以算是一个B/S和C/S混搭的系统
   发表时间:2011-08-24  
从道理上将B/S也是C/S的一种特定情况,Client是Browser而已。B/S应用架构的一些好的思路,其他C/S应用同样可以借鉴。
0 请登录后投票
   发表时间:2011-08-26  
taolei0628 写道
从道理上将B/S也是C/S的一种特定情况,Client是Browser而已。B/S应用架构的一些好的思路,其他C/S应用同样可以借鉴。



0 请登录后投票
   发表时间:2011-08-26  
呵呵,突然发现我们在一个项目里面。
项目使用BS,或CS模式主要看使用者的场景,不能因为有手机了就认为是CS模式。手机只是一种接入方式,如果单纯从手机的应用程序的角度讲,手机的程序是CS模式的,但从整体来讲BS是一种趋势。要考虑的因素很多,比如说并发量,数据处理能力,升级等等。而且现在BS,CS区分已经很淡了,很多BS里面其实有CS的思想在里面,从以前的Java的swing,到现在的胖客户端,其实都是一种CS,只不过是嵌套在浏览器中而已。
对于你说的webservice也不对,ws是针对点对点之间的传递的一种协议而已,不是说可以使用http就放弃其他协议,各有各的好处,不能一概而论。
0 请登录后投票
   发表时间:2011-08-26  
对于http://localhost:8080/service/accept.action,Flex下的是Http Service定义
对于....?wsdl,Flex下的是Web Service定义
常规的Web Service是一种SOAP实现,可以进行简单对象交互;而Http Serivce我记得获取的是字符串,通常封装Json/XML。
0 请登录后投票
   发表时间:2011-08-26  
RESTful WebService 也是通过暴露URI来提供服务的
0 请登录后投票
   发表时间:2011-08-26  
nanjinghhu 写道
呵呵,突然发现我们在一个项目里面。
项目使用BS,或CS模式主要看使用者的场景,不能因为有手机了就认为是CS模式。手机只是一种接入方式,如果单纯从手机的应用程序的角度讲,手机的程序是CS模式的,但从整体来讲BS是一种趋势。要考虑的因素很多,比如说并发量,数据处理能力,升级等等。而且现在BS,CS区分已经很淡了,很多BS里面其实有CS的思想在里面,从以前的Java的swing,到现在的胖客户端,其实都是一种CS,只不过是嵌套在浏览器中而已。
对于你说的webservice也不对,ws是针对点对点之间的传递的一种协议而已,不是说可以使用http就放弃其他协议,各有各的好处,不能一概而论。


我觉得你关于BS和CS的讨论挺有道理~~~

不过WS我觉得说得就不对了,ws不是一种协议,应该是一个概念,它用的协议就有很多了,比如http和soap等
0 请登录后投票
   发表时间:2011-08-26  
WSDL仅仅是对服务接口的名称,传入参数,返回参数作了标准化xml形式的定义,不同平台下都有自动生成的工具,有了这个文件可以很好的保证一致性,不容易出错。
其实用doc文档也能启相应的作用,只是相比WSDL便捷性,准确性,要差得远了。
0 请登录后投票
   发表时间:2011-08-27  
kyfxbl 写道
但是现在这种形式,我感觉效果和上面的例子也是一样的,服务端就是发布web service的系统A,终端应用就是系统B,虽然它没有看到什么WSDL,但是它只要知道http://localhost:8080/service/accept.action这个地址,和这个地址需要的参数,照样可以访问到,并且也能让系统A作逻辑处理,也能得到系统A返回的结果。虽然这种形式上不是web service,但是实际的效果和web service又有什么区别呢?如果是这样的话,那么什么又才是真正的web service呢?


这个,我的理解是WebService也就是增强了
直接访问http://localhost:8080/service/accept.action的方便性而已。
直接访问URL,你要自己分析请求参数、自己组织返回字符串、二进制流等基础性工作。

WEBService在这个基础上,实现了参数和返回值的自动编码、解码(XML形式),
使得远程调用透明化。方便编程而已。当然,和传统的远程过程调用相比,优点是跨平台。

kyfxbl 写道
上面这些特征又类似于传统的C/S架构,所以我现在也有点迷糊,究竟如何区分所谓的B/S和C/S呢?至少我认为我们这个系统不是纯粹的C/S,但是又不能说是B/S。。。


这个好像挺难说的。

C/S传统是指客户端直接连接数据库的方式(2层结构)。
不过后来的三层的C/S结构,就和B/S结构有些类似了,区别是C/S端既可以采用Socket长连接服务器端,
也可以采用HTTP协议连接服务器端。这个看怎么样设计了。

从另一点上,还有一个说法是说C/S是指“胖客户端”、BS特指“基于浏览器的客户端”--也就是“瘦客户端”。
0 请登录后投票
   发表时间:2011-08-28  
B/S 就是C/S的的特殊表现形式。


其实对于你来说,以后接入ipad,nokia手机,同样都是可行的。 S都是一样的,C都是变化的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics