`
tl_oni
  • 浏览: 29796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

长连接、短连接、同步异步、tcp/ip

    博客分类:
  • java
 
阅读更多

什么是长连接?

其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。

通常的短连接操作步骤是:

连接-》数据传输-》关闭连接;

而长连接通常就是:

连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接;


这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了


什么时候用长连接,短连接?


长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。


但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。


总之,长连接和短连接的选择要视情况而定。


一般在java上代码实现是


短连接:

run(){

read //读取请求包

process //处理

write //应答处理结果

}

长连接:

run(){

while(NotEnd){

read

process

write

}

}


以下是关于长连接中的检测保持连接的心跳比喻


连接短连接只是一个概念性的问题,只要知道其概念,不是一个特殊的东西:

长连接:系统通讯连接建立后就一直保持。

短连接:只有系统需要相互发消息连接才建立(客户端发起),请求消息得到响应后连接关闭;

通讯实体间使用长连接,一般还需要定义心跳消息,定期发送来检测系统间链路是否异常,每隔一定时间发送一次心跳,如果一定次数没有收到心跳消息,这认为此连接出现问题,需要断开连接重新建立。

具体心跳消息的格式,以及发送间隔,以及多少次没有收到心跳就认为链路异常,以及数据部是否算作心跳消息(有的系统如果接收到数据包则会清除心跳计时器也就相当于系统中的数据包也算作心跳消息);这个需要两端进行协商。比如GSM常用的短消息中心和其他网络实体互连的SMPP协议,要求建立的就是长连接.


所以长短连接只是一个概念问题长短连接的socket,就是使用普通的socket函数,没有什么特殊的。


最后,关于同步与异步


同步操作指上一个操作返回结果后才能发下一个操作的数据包

异步操作指先把所有的操作数据包发完后 再等待它们的返回结果

相比较看 异步操作速度快 特别是在每个包处理方法独立的情况下


异步操作一般提供两个端口,一个负责接收数据,一个负责发送数据

<<<<<<<<<<<<<<==========================================>>>>>>>>>>>>>>>>

长短的区别是我要搞清楚,见现在看而言,长连接占用资源,但是一般通信性能肯定是好,短省资源。另外一个很重要的区别就是,主动与被动,长连接是先主动建立一个连接,有数据就发送,没有就等,短连接则是如果有通信要求,被动的先建立一个连接,收发数据,断开。具体的好坏个人觉得还是需要编程实践才知道。应该说对与server和client的影响还是很大。


TCP/IP通信程序设计的丰富多样性


刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程

序,据此一些人可能会认为TCP/IP编程很简单。其实不然,

TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在

通信方式和报文格式的多样性上。


一。通信方式

主要有以下三大类:

(一)SERVER/CLIENT方式

1.一个Client方连接一个Server方,或称点对点(peer to peer):

2.多个Client方连接一个Server方,这也是通常的并发服务器方式。

3.一个Client方连接多个Server方,这种方式很少见,主要

用于一个客户向多个服务器发送请求情况。


(二)连接方式

1.长连接

Client方与Server方先建立通讯连接,连接建立后不断开,

然后再进行报文发送和接收。这种方式下由于通讯连接一直

存在,可以用下面命令查看连接是否建立:

netstat –f inet|grep 端口号。

此种方式常用于点对点通讯。


2.短连接

Client方与Server每进行一次报文收发交易时才进行通讯连

接,交易完毕后立即断开连接。此种方式常用于一点对多点

通讯,比如多个Client连接一个Server.


(三)发送接收方式

1.异步

报文发送和接收是分开的,相互独立的,互不影响。这种方

式又分两种情况:

(1)异步双工:接收和发送在同一个程序中,有两个不同的

子进程分别负责发送和接收

(2)异步单工:接收和发送是用两个不同的程序来完成。

2.同步

报文发送和接收是同步进行,既报文发送后等待接收返回报文。

同步方式一般需要考虑超时问题,即报文发上去后不能无限等

待,需要设定超时时间,超过该时间发送方不再等待读返回报

文,直接通知超时返回。


实际通信方式是这三类通信方式的组合。比如一般书上提供的

TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的

组合是基本不用的,比较常用的有价值的组合是以下几种:


同步短连接Server/Client

同步长连接Server/Client

异步短连接Server/Client

异步长连接双工Server/Client

异步长连接单工Server/Client


其中异步长连接双工是最为复杂的一种通信方式,有时候经

常会出现在不同银行或不同城市之间的两套系统之间的通信。

比如金卡工程。由于这几种通信方式比较固定,所以可以预

先编制这几种通信方式的模板程序。


二.报文格式

通信报文格式多样性更多,相应地就必须设计对应的读写报文的接

收和发送报文函数。


(一)阻塞与非阻塞方式 

1.非阻塞方式

读函数不停地进行读动作,如果没有报文接收到,等待一段时间后

超时返回,这种情况一般需要指定超时时间。

2.阻塞方式

如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。


(二)循环读写方式

1.一次直接读写报文

在一次接收或发送报文动作中一次性不加分别地全部读取或全部

发送报文字节。

2.不指定长度循环读写

这一般发生在短连接进程中,受网络路由等限制,一次较长的报

文可能在网络传输过程中被分解成了好几个包。一次读取可能不

能全部读完一次报文,这就需要循环读报文,直到读完为止。


3.带长度报文头循环读写

这种情况一般是在长连接进程中,由于在长连接中没有条件能够

判断循环读写什么时候结束,所以必须要加长度报文头。读函数

先是读取报文头的长度,再根据这个长度去读报文.实际情况中,

报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须

转换成ASCII,常见的报文头码制有:

(1)n个字节的ASCII码

(2)n个字节的BCD码

(3)n个字节的网络整型码


以上是几种比较典型的读写报文方式,可以与通信方式模板一起

预先提供一些典型的API读写函数。当然在实际问题中,可能还

必须编写与对方报文格式配套的读写API.


在实际情况中,往往需要把我们自己的系统与别人的系统进行连接,

有了以上模板与API,可以说连接任何方式的通信程序都不存在问题

分享到:
评论

相关推荐

    C#TCP/IP同步和异步通信

    基于C#的TCP/IP同步以及异步通信实现方法,我已经把两种方法封装好了,直接调用就可以了,不仅可以实时获取连接的客户端,还可以实时刷新客户端连接,很好用的,如果有什么问题,欢迎联系我!

    C#_异步TCP_IP_Socket_P2P_通信客户端.zip

    C#,基于TCP/IP的Socket通信客户端,包含服务器端和客户端,有图形化界面,通过服务器IP连接,是异步通信,非同步通信,点对点通信,不支持一对多,功能上属于很简单的,演示和理解基于TCP/IP的Socket通信原理有一定...

    .net 稳定 高效 易用 可同步 TCP 通信框架

    .net 稳定 高效 易用 可同步 TCP 通信框架 使用平台: WinXP,WIN7,WIN8,WINCE,WINPHONE。 使用.net 2.0 框架。 主要功能介绍: 1、可以代替 Oracle,Mysql客户端 在不安装Oracle,MySql客户端的情况下访问, ...

    TCP_IP通信程序设计的丰富多样性.pdf

    (二)连接方式:长连接与短连接 (三)发送接收方式:同步、异步、单工、双工通讯 二.报文格式 (一)阻塞与非阻塞方式 (二)循环读写方式 1.一次直接读写报文 2.不指定长度循环读写 3.带长度报文头循环读写 4.ascii码、BCD...

    C#网络应用高级编程

    2.3 异步TCP应用编程  2.3.1 EventWaitHandle类  2.3.2 AsyncCallback委托  2.3.3 BeginAcceptTcpClient方法和EndAcceptTcpClient方法  2.3.4 BeginConnect方法和EndConnect方法  2.3.5 发送数据 ...

    Linux高性能服务器编程

    5.1.4 IP地址转换函数 5.2 创建socket 5.3 命名socket 5.4 监听socket 5.5 接受连接 5.6 发起连接 5.7 关闭连接 5.8 数据读写 5.8.1 TCP数据读写 5.8.2 UDP数据读写 5.8.3 通用数据读写函数 5.9 带外...

    御剑高速tcp全端口扫描工具

    这是一个基于.NET 2.0编写的高速TCP全端口扫描程序,扫描速度取于你的上行带宽,连接缓冲区。主要是采用了.NET中的异步模型加事件通知(俗称IOCP),可能涉及到重复造轮子的嫌疑,但是确实要比很多端口扫描程序的...

    C#学习文档实例讲解

    2.3 异步TCP应用编程 66 2.3.1 EventWaitHandle类 67 2.3.2 AsyncCallback委托 69 2.3.3 BeginAcceptTcpClient方法和EndAcceptTcpClient方法 70 2.3.4 BeginConnect方法和EndConnect方法 70 2.3.5 发送数据 71 2.3.6...

    进程间通讯Demo.zip

    套接字(Socket)是支持TCP/IP协议(安全)和UDP协议(快速)的网络通信的基本操作单元。套接字包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地...

    C#网络核心编程(Word版电子书+PPT+源代码+习题解答)

    2.3 异步TCP应用编程 66 2.3.1 EventWaitHandle类 67 2.3.2 AsyncCallback委托 69 2.3.3 BeginAcceptTcpClient方法和EndAcceptTcpClient方法 70 2.3.4 BeginConnect方法和EndConnect方法 70 2.3.5 发送数据 71 2.3.6...

    Windows网络编程

    3457.5.1 枚举TCP和UDP连接状态 3457.5.2 Ping实例 3517.6 小结 357第8章 MFC Winsock高级编程 3598.1 Web基础知识 3598.1.1 客户端 3598.1.2 服务器 3608.1.3 HTTP 3628.2 HTTP服务器设计 3638.2.1 同步...

    Windows Sockets网络编程 可能是最清晰版本(Windows Sockets 2规范解释小组负责人亲自执笔。)总共4个包,part1

     全书分为三部分:第一部分(第1~6章),提供了翔实的背景知识和框架方面的概念,借助于此框架,读者可理解WinSock的具体细节,包括WindowsSockets概述、OSI网络参考模型、TCP/IP协议簇中的协议和可用的服务、...

    Windows Sockets网络编程 总计4个包,part2

     全书分为三部分:第一部分(第1~6章),提供了翔实的背景知识和框架方面的概念,借助于此框架,读者可理解WinSock的具体细节,包括WindowsSockets概述、OSI网络参考模型、TCP/IP协议簇中的协议和可用的服务、...

    计算机网络常见问题解答

    问题5-1:TCP协议是面向连接的,但TCP使用的IP协议却是无连接的。这两种协议都有哪些主要的区别? 问题5-2:从通信的起点和终点来比较,TCP和IP的不同点是什么? 问题5-3:端口(port)和套接字(socket)的区别是什么?...

    计算机网络知识点总结.docx

    6.ISO/OSI参考模型和TCP/IP模型? 7.端到端通信和点到点通信的区别? 第二章、物理层 8.如何理解同步和异步?什么是同步通信和异步通信? 9.频分复用 时分复用 波分复用 码分复用 第三章、数据链路层 10.为什么要...

    TCPIPSocket.Swift:在Swift上提供简单,常规,瘦,同步,异步和最小的TCPIP套接字包装

    在Swift上提供简单,常规,瘦,同步,异步和最小的TCP / IP套接字包装。 这只是按原样包装BSD套接字,并且不会尝试添加任何额外的抽象。 我相信这可以为任何应用程序提供服务,但是我打算将其用于快速应用程序。 ...

    易语言ETCP全套加例子源码

    源码内实现了用ectp来实现端口转发,代理检测,多线程发送,以及同步异步的各项例子,并且支持代理IP,包含市面上多个版本的etcp,以及和网页交互的例子等等...

    VB网络编程实例

    &lt;br/&gt;◆ 88.htm 用VB创建自己的通信程序 &lt;br/&gt;◆ 89.htm 用VB构建Internet的应用[微软提供] &lt;br/&gt;◆ 90.htm 用VB开发标准CGI程序 &lt;br/&gt;◆ 91.htm 用VB实现客户——服务器(TCP IP)编程实例 &lt;br/&gt;◆ 92.htm 用VB实现...

    清华大学的计算机网络课件

    问题1-7:TCP/IP的体系结构到底是四层还是五层? 问题1-8:我们常说“分组交换”。但又常说“路由器转发IP数据报”或“路由器转发帧”。究竟“分组”一词应当用在什么场合? 问题1-9:到商店购买可一个希捷公司生产...

    CCNA培训资料(1).doc

     路由器: 同上 5、通信协议:(计算机网络得语言) OSI 协议 OSI七层参考模型 TCP/IP Internet 企业网 教育网 行业网 IPX/SPX 6、网络应用软件: IE IIS、 SMTP POP3、、 OA办公系统 网络得分类 局域网 LAN 企业...

Global site tag (gtag.js) - Google Analytics