字符串可以转化成二进制
而Socket发送的就是二进制数据。可以将Json转化的二进制数据包含在内,加上数据头什么的一起传输。
异常处理,尤其是socket异常处理更加重要,因为与你连接的那一头不会得到你发生错误的通知。然后两个都是多线程,就都要注意线程共享资源锁的管理。最好对每个资源只有一个synchronized的可写对象,每个操作这个资源的都要通过这个对象来操作,这样不容易忘记,效率也比较好。
socket还要注意,一个客户可能双开来连接服务器,这个时候服务器是允许还是拒绝要想清楚。
多线程要注意的是,如果可以不用多线程,最好不要使用多线程。通常需要多线程的地方有:消息循环、Socket的服务器监听程序和其他需要死循环的地方。
在需要死循环的地方经常会用到多线程。既然是死循环,那么这个线程就要注意优先级,以前做过一个星际争霸的小外挂,没有设置优先级的时候导致玩星际争霸的时候会非常慢,把优先级减1设置为-1(C++,也就是比正常低),就正常了。
在服务器中也需要注意监听程序的优先级,一般都应该是降低一些吧。
另外socket还要注意安全,牵扯到网络的最好每一步都有每一步的安全措施。传输的是密码就要加密。
如果做挂接式的程序,那么无论是多线程还是socket都要注意尽量不破坏这个进程的原有数据。
Socket实现服务器与客户端之间的物理连接,并进行数据传输。主要有TCP/UDP两个协议。Socket处于网络协议的传输层。
socket的一个特点是他可以是"长链接",也就是说除非双方主动断开,否则,他不会自动断开.这个特点非常的好,很多应用都会需要长链接,不过缺点是他太博爱了,来者不拒,而且还不好检查,所以,为了保持服务器资源的最大利用率,通常我们会要求双方通过定时的心跳方式来确认长链接的有效性.只要心跳不存在,服务器就可以及时剔除掉这些死链接.
心跳机制是TCP在一段时间间隔后发送确定连接端是否还存在,如果存在的话就会回传一个包确定网络有效,如果心跳包有问题,则通知上层应用当前网络有问题了。
TCP:传输控制协议,面向连接的的协议,稳定可靠。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。
tcp协议有一个特点就是三次握手:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,
UDP:广播式数据传输,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
优点:
1.传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低
2.传输数据时间短,性能高
3.适合C/S之间信息实时交互
4.可以加密,数据安全性高
缺点:
1.需要对传输的数据进行解析,转化为应用级的数据
2.对开发人员的开发水平要求高
3.相对于Http协议传输,增加了开发量
http全文是超文本传输协议,是一种万维网常用的协议,它是TCP协议的一种典型上的应用,Http请求主要有http协议,基于http协议的soap协议,常见的http数据请求方式有get和post,web服务
优点:
1.基于应用级的接口使用方便
2.要求的开发水平不高,容错性强
缺点:
1.传输速度慢,数据包大。
2.如实现实时交互,服务器性能压力大
3.数据传输安全性差
HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的
tcp协议: 对应于传输层
ip协议: 对应于网络层
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的
Socket适用场景:网络游戏,银行交互,支付。
http适用场景:公司OA服务,互联网服务。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)