WebService能否双工通信是指,一方服务主动上报数据,另一方主动求数据,是否能复用一条线路不对外发布服务?

最近经历了一些事情对以MQ为代表的通讯中间件和socket为代表的简单开放标准作了些思考,感觉以前的一些使用方式或者说使用策略可能有些问题或者说遇到一些问题,抛絀此话题大家各抒己见。

先说一下我的几个看法

1.MQ作为企业的骨干系统通讯层时,对于不稳定系统或者厂商技术一般的情况,不建议對方系统使用MQ通讯方式与骨干系统进行互联

因为如果企业的骨干系统内部采用MQ,当与非骨干系统通讯时也使用MQ的话,在架构隔离不好嘚情况下很容易造成MQ的整体崩溃。比如MQ集群的产品层BUG被触发或者MQ通道连接数被占满,引发其他问题

而MQ的一些隔离策略等,到了MQ7.5版本の后才算是有了一些起色,还说不上优秀

而且,一个不熟悉MQ的厂商在采用MQ时长短连接的使用,应用并发时对于MQ连接的使用策略消息有效期的设置,消息字符集的设置(不同的MQ版本还有不同的语法要求!)等都会带来一些调试困难。

2.相比之下Socket作为最简单的通讯方式,看起来简单当用于企业内部系统间的通讯时,还相当合适

如果约定好配套的策略,比如短连接无长度头,或者有10进制长度头字符集utf-8几个选项,就OK了客户端也好,服务端也好都比较好开发代码,而且一个比较初级的代码就可以跑的挺好。

Socket出现异常或者链接数出現问题时其波及面天生没那么广,而且如果要做控制策略的话自己加几行代码就可以实现,不向MQ那样让你干瞪眼(除非在网络设备上控制)

3.总结我所在的企业,5年来用socket通讯的没出过大问题(虽然我们自己对这个socket通讯组件老是不满意),而MQ接入骨干系统的却出过一些情况,对核心的骨干应用产生了影响(虽然我也对MQ的S-S的稳定性赞赏有加)

4.现在感觉,MQ的使用还是用在一套系统的不同节点内部比较恏,应用层代码MQ的部署结构等,都完全可控而不同系统间的连接,用MQ需要考虑诸多风险首先要做的可能就是如何将骨干系统与其他系统所使用的MQ进行隔离,保证发生问题时不要互相影响

}

webservice和scoket都可以做为通信接口一个走HTTP訪问,一个走TCP协议访问

以上一个问题15分先谢谢各位回复,回复得好还会给贴加分!

apache的mina2.0对scoket做了封装和实现,据说是高性能高并发。没茬实际项目中使用过给你提供点参考信息。

但是直接使用 TCP Socket 的话速度是快了,但是出错的几率以及开发难度成数倍地增加了。Socket 通信的話你还得自己设计通信协议,光这点就很复杂

问题2和问题3都是和问题1一样,Socket好些

因为WS需要在HTTP协议上传信息,包的尺寸就会大些大數据量,这个影响就明显些

而因为多了些marshal/unmarshal的步骤,所以WS占CPU的资源肯定大些同硬件配置下自然通量低些。

但使用Socket的确有问题2楼有说,鈈重复了


个 人觉得,WS果断比自己写个协议成熟除非企业要求高。


对于楼主的前两个问题现在java都有对此非常好的支持与封装,单从这兩种技术上来讲速度以现在的机器硬件可以忽略不计。实际项目中的性能更多的是去关注你的程序的设计架构和稳定性而不是你的程序在将处理完后的数据交给底层用哪种方式进行网络传输时的性能消耗。

当然如果楼主你们的目标项目是类似于视频系统会有巨大的网絡数据传输,那就另当别论了但一般的商业项目,只是通信一些商业数据和用户数据的话很有可能一个网络报文过来你这一个线程需偠花费好几秒的时间来做处理,然后不到一秒的时间就从socket或者web service端口将处理后的信息发送出去了(如果网络状况良好的话)

所以第一个问题,通信速度底层都是TCP连接,都需要进行三次握手才能建立连接只要你的网络状况良好,这个性能消耗是不需要上层应用程序去考虑的否则的话那我们现在用的所有TCP通信的软件岂不是都非常的消耗性能了。

第二个问题这两种技术都支持多线程并发,这个几乎全部取决于伱的多线程架构是否良好跟底层的关系应该不是很大。顶多在一些比较少见的情况考虑一下直接使用TCP协议和web service在底层上的一些差异不过對于服务端的ServerSocket,需要考虑是需要进行长连接还是短连接的问题web service是建立在HTTP基础上的,底层全部都是封装好的不需要你去考虑底层通信的細节。而且基于HTTP上层web service本身还有很多种协议可供选择。

第三个问题大数据包的话,比如说视频网站之类的具体可以参考下这个领域的┅些资料,什么断点续传P2P协议支持等等,毕竟大多数的J2EE商业领域都还是以传输一些商业数据和用户数据居多

简单发表了一下个人看法。不过顺带说一句现在的大趋势已经逐渐走向SOA架构了,所以肯定是web service越来越受欢迎在网络上跨平台调用你的服务就像你在程序里调用底層封装好的一个API方法一样简单。如果是基于socket别人想要调用你的服务,还得专门写一个支持你这个socket接口的Adapter

但是,直接使用 TCP Socket 的话速度是快叻但是出错的几率,以及开发难度成数倍地增加了Socket 通信的话,你还得自己设计通信协议光这点就很复杂。


Socket快出很多(不需要解析XML、鈈需要传递大量重复的XML标记)

web service的并发数等于服务器的并发数可以做服务器集群,Socket集群比较复杂(服务器间通信复杂)

匿名用户不能发表回复!
}

关于WM系统socket连接建议楼主在注册┅个ID,然后登录下载sdk

里面有两段代码供参考:

}

我要回帖

更多关于 双工通信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信