Java中开发一个基于Socket的TCP通信的短信接口一般要多久呢?
对于一个完全没接触过socket和多线程的新手,开发一个http接口要多久呢?
首先利用socket和服务端通信,然后再对发送的报文做处理,最后做一个http接口让别人使用,整个功能实现下来要多久呢?报文是自定义格式的!
------解决方案--------------------有现成的soap技术,为啥非要用socket实现呢?是要学习用的么
------解决方案--------------------
首先, 第一步和第二布网上都有现成的例子, 可以直接拿过来, 稍作修改。 http接口的协议应该是要跟对方的商议之后而定的, 根据他们的需求, 定义个接口便可。 整个流程下来不难
------解决方案--------------------首先回答楼主关于协议处理的问题:
按我的理解,客户端与服务器之间的通讯协议应该是双方约定的私有通讯协议(即数据排列格式由双方约定),设计者在制定协议格式时,必须考虑协议的唯一标识性,即每条通讯报文都具有唯一的特征属性(比如报文编号)。楼主如果作为客户端向服务器发送请求,只要在发送之前,将报文内容存到内存中即可,当收到服务器的反馈报文时,根据报文编号找到对应的请求报文(反馈报文与请求报文编号一致,或有其他关联规则)。
另外,这个问题和多线程没有关系,就算开再多的线程,也是使用同一条TCP链路进行通讯,每条线程读取到的内容是随机的,所以靠多线去进行报文对应,没有意义。
然后就是关于程序通讯机制的问题了:
本例中双方通讯是使用的TCP方式,也就是全双工长连接的方式。理论上,任何使用TCP方式通讯的链路,都需要使用心跳机制来确定对方的在线情况,因为TCP是保持连接的,而实际运行时此前建立的连接可能被中断,从而导致后续的发送请求失败。正常的TCP链路close,程序是可以监测到的(关闭时,系统会自动发送一条链路断开的报文),但是异常断开的话,程序是监测不到的(如直接拔掉网线、交换机故障等),对方会仍然认为链路可用,所以需要使用心跳机制,定时发送报文,证明双方状态正常。
所以楼主需要使用异步的方式来管理通讯。
MINA提供了现成的框架,对用户而言,网络通讯变成了触发式,不再需要用户显式的死循环轮询读socket了,当指定链路收到数据报文的时候,会自动调用指定的接口函数,楼主只要在那里写下相关逻辑即可。