精华内容
下载资源
问答
  • udpwebsocket的示例

    千次阅读 2020-05-05 19:50:50
    最近工作中遇到用udp对接GPS信息报文,以及用websocket展示推送最新的问题,在此记录下。 udp协议和websocket的优缺点和协议的原理,就不再写了,网上有很多文章都写到这两个,这里就直接就其应用代码做下记录。 UDP...

    最近工作中遇到用udp对接GPS信息报文,以及用websocket展示推送最新的问题,在此记录下。
    udp协议和websocket的优缺点和协议的原理,就不再写了,网上有很多文章都写到这两个,这里就直接就其应用代码做下记录。

    UDP

    udp服务端

    用于接收客户端发送的内容,并做处理。
    例如,要用udp接收以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <PPVSPMessage>
      <Version>2.0</Version>
      <Sequence>809</Sequence>
      <CommandType>REQUEST</CommandType>
      <Command>GPS</Command>
      <Params>
        <HandleFlag>1</HandleFlag>
        <DeviceID>123456789</DeviceID>
        <TimeZone>+08:00</TimeZone>
        <Time>2020-04-27 15:14:19</Time>
        <DivisionEW>E</DivisionEW>
        <Longitude>121.262197</Longitude>
        <DivisionNS>N</DivisionNS>
        <Latitude>28.323317</Latitude>
        <Direction>27</Direction>
        <Speed>7</Speed>
        <Satellites>22</Satellites>
        <Precision>5</Precision>
        <Height>1090</Height>
        <RetransFlag>0</RetransFlag>
        <NeedsResponse>1</NeedsResponse>
        <Remark>test/debug</Remark>
        <Type>CZ</Type>
        <DeviceName>123456789</DeviceName>
        <DeviceType>CZ</DeviceType>
      </Params>
    </PPVSPMessage>
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    public class UdpService {
    
    	public static void main(String[] args) {
    		try {
    			DatagramSocket serverSocket = new DatagramSocket(9588);//创建一个9588端口的udp
    			while (true) {
    				StringBuffer sbf = new StringBuffer("");
    				while(true) {
    					byte[] receiveData = new byte[1024 * 60];//创建一个接收用的数组,这个可以udp双方约定好编码和包长度
    					DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);//接收包
    					serverSocket.receive(receivePacket);//接收数据
    					String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength(), "utf-8");//接收到的内容转换成string
    					sbf.append(sentence);
    					if(sentence.indexOf("</PPVSPMessage>") != -1) {//PPVSPMessage表示一条GPS信息结束
    						break;
    					}
    				}
    				String xml = sbf.toString();
    				try {
    					Document doc = DocumentHelper.parseText(xml);//解析读取到的xml内容
    					Element root = doc.getRootElement();
    					Element head = root.element("Params");//存储GPS信息的数据
    					String value = head.element("Direction").getTextTrim();
    					//执行保存
    					System.out.println(value);
    					serverSocket.close();
    				} catch (DocumentException e) {
    					e.printStackTrace();
    				}
    
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    udp客户端

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class UDPSend {
    
    	public static void main(String[] args) throws Exception {
    		String[] xml = new String[] {"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
    				"<PPVSPMessage>\n", 
    				"  <Version>2.0</Version>\n", 
    				"  <Sequence>809</Sequence>\n", 
    				"  <CommandType>REQUEST</CommandType>\n",
    				"  <Command>GPS</Command>\n",
    				"  <Params>\n", 
    				"    <HandleFlag>1</HandleFlag>\n",
    				"    <DeviceID>241093239</DeviceID>\n",
    				"    <TimeZone>+08:00</TimeZone>\n", 
    				"    <Time>2020-04-27 15:14:19</Time>\n", 
    				"    <DivisionEW>E</DivisionEW>\n",
    				"    <Longitude>121.262197</Longitude>\n", 
    				"    <DivisionNS>N</DivisionNS>\n",
    				"    <Latitude>28.323317</Latitude>\n",
    				"    <Direction>27</Direction>\n", 
    				"    <Speed>7</Speed>\n", 
    				"    <Satellites>22</Satellites>\n",
    				"    <Precision>5</Precision>\n",
    				"    <Height>1090</Height>\n",
    				"    <RetransFlag>0</RetransFlag>\n",
    				"    <NeedsResponse>1</NeedsResponse>\n",
    				"    <Remark>test/debug</Remark>\n",
    				"    <Type>CZ</Type>\n",
    				"    <DeviceName>241093239</DeviceName>\n", 
    				"    <DeviceType>CZ</DeviceType>\n",
    				"  </Params>\n",
    				"</PPVSPMessage>\n"};
    //		String xml = "";
    //		String xml = "aaaaa";
    		DatagramSocket serverSocket = new DatagramSocket(2345);//创建客户端的udp,端口是2345
    		for(int i = 0;i<2;i++) {
    			for(String data : xml) {
    				byte[] sendData = data.getBytes("utf-8");//用约定好的字符串编码和长度发送内容
    		        DatagramPacket receivePacket = new DatagramPacket(sendData, sendData.length,InetAddress.getByName("127.0.0.1"),9588);
    		        serverSocket.send(receivePacket);//发送数据
    			}
    		}
            
    	}
    	
    	 
    }
    

    以上完成udp的发送和接收。

    websocket

    在项目中,需要在gis地图上及时展示最新的问题,以及更新问题的状态。原定用ajax轮询的方式,每隔一分钟进行数据的请求,但是地图上展示的可是一个月的问题数,每次请求返回好几千的问题。清空图层源source再重新加载所有问题,不仅速度慢,还造成服务器的负担,于是改成让服务器使用websocket的方式进行推送。
    需要用到以下图片中的jar包。
    在这里插入图片描述
    在后端中,定义websocket的配置类

    import java.util.Set;
    
    import javax.websocket.Endpoint;
    import javax.websocket.server.ServerApplicationConfig;
    import javax.websocket.server.ServerEndpointConfig;
    
    public class WebSocketConfig implements ServerApplicationConfig {
    
    	public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
    		System.out.println("websocket--------"+scanned.size()+"----------");
    		return scanned;
    	}
    
    	public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scanned) {
    		
    		return null;
    	}
    
    }
    

    定义websocket入口

    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.concurrent.ConcurrentHashMap;
    
    import javax.websocket.OnClose;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    
    @ServerEndpoint(value="/mapdata")//访问地址
    public class WebSocketService {
    
    	//连接了websocket的用户
    	private static ConcurrentHashMap<String, Session> webSocketSet = new ConcurrentHashMap<String, Session>();//用于存储通过ws连接进来的用户id以及其对应的session
    	@OnOpen//连接执行的方法
    	public void onOpen(Session session) {
    		System.out.println("有websocket连接成功");
    		Map<String, List<String>> requestParameterMap = session.getRequestParameterMap();
    		String userid = requestParameterMap.get("userid").get(0);
    		webSocketSet.put(userid, session);
    	}
    	
    	@OnMessage//接收到消息执行的方法
    	public void onMessage(Session session,String msg) {
    		
    	}
    	
    	@OnClose//关闭连接执行的方法
    	public void onClose(Session session) {
    		System.out.println("websocket关闭");
    		for(Entry<String, Session> map:webSocketSet.entrySet()) {
    			String key = map.getKey();
    			if(map.getValue().equals(session)) {
    				webSocketSet.remove(key);
    			}
    		}
    		System.out.println("关闭了连接!");
    	}
    	
    	public static void sendAll(String text) {
    		for(Entry<String, Session> map:webSocketSet.entrySet()) {
    			System.out.println(map.getKey());
    			try {
    				map.getValue().getBasicRemote().sendText(text);//给所有的ws连接发送消息
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	public static ConcurrentHashMap<String, Session> getWebSocketSet() {
    		return webSocketSet;
    	}
    	
    	public static void setWebSocketSet(ConcurrentHashMap<String, Session> webSocketSet) {
    		WebSocketService.webSocketSet = webSocketSet;
    	}
    	
    }
    

    前端代码

    var ws = null;
        if ('WebSocket' in window) {
            ws = new WebSocket("ws://127.0.0.1:6068/mapdata?userid="+new Date().getTime());
        } else if ('MozWebSocket' in window) {
            ws = new MozWebSocket("ws://127.0.0.1:6068/mapdata?userid="+new Date().getTime());
        } else {
            alert("浏览器不支持websocket");
        }
        ws.onopen = function () {//连接成功执行代码
    
        };
        ws.onerror = function(){//失败执行代码
          
    
        }
        ws.onmessage = function (event) {//接收到消息执行代码
            var data = event.data;
        };
        ws.onclose = function (event) {//关闭执行代码
    
        };
    

    至此,websocket的代码完成

    展开全文
  • html5的websocket能够建立udp连接吗?就是客户端和客户端的连接,如果所有的连接都通过服务器,那人多了服务器压力就暴增了
  • TCP/UDPwebSocket

    2019-07-11 17:24:16
    特点:面向有链接,所有问题都要建立连接,数据安全,完整,三次握手后建立连接后才可以数据传输 TCP协议传输的客户端 package ClientAndServer_TCP; import java.io.InputStream; import java.io.OutputStream; ...

    1. TCP协议:控制传输协议

    特点:面向有链接,所有问题都要建立连接,数据安全,完整,三次握手后建立连接后才可以数据传输

    TCP协议传输的客户端

    package ClientAndServer_TCP;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class Client {
        public static void main(String[] args)  throws  Exception{
    
            /*
            服务器端ip地址
            自动建立连接
            三次握手
            input和output流
             */
            while (true) {
                Socket client = new Socket("127.0.0.1",12345);
                System.out.println("输入要发送的内容:");
                Scanner sc = new Scanner(System.in);
                // 输出流,客户端对于服务器是输出流
                String msg = sc.nextLine();
                OutputStream outputStream = client.getOutputStream();
    
                outputStream.write(msg.getBytes());
    
                System.out.println("发送ok!!!");
                //读取服务器返回来的反馈
                InputStream inputStream = client.getInputStream();
                byte[] bs = new byte[1024];
                int len = inputStream.read(bs);
                System.out.println("服务器响应:"+ new String(bs,0,len));
    
    
                System.out.println("==============================");
            }
        }
    }
    
    

    TCP协议传输的服务器端

    package ClientAndServer_TCP;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * TCP服务器
     * author lp
     */
    
    public class Server {
        public static void main(String[] args) throws Exception {
            ServerSocket serverSocket = new ServerSocket(12345);
            //获取哪一个客户端连接的我  也具有等待功能
            while (true) {
                System.out.println("等待接受数据...");
    
                Socket client = serverSocket.accept();
    
                String ip = client.getInetAddress().getHostAddress();
    
    
                //获取输入流,相对于客户端为输出流
                InputStream inputStream = client.getInputStream();
    
                byte[] bs = new byte[1024];
                int len = inputStream.read(bs);
                System.out.println("客户端地址" + ip);
    
                System.out.println("客户端说:" + new String(bs, 0, len));
                //向客户端回写收到了数据
                OutputStream outputStream = client.getOutputStream();
                outputStream.write("消息已收到".getBytes());
                System.out.println("****************************************");
    
                //serverSocket.close();
                //client.close();
            }
        }
    }
    
    

    结果:

    客户端在这里插入图片描述
    服务器端:
    在这里插入图片描述
    客户端回车发送后:
    在这里插入图片描述
    服务器收到消息:
    在这里插入图片描述

    2. UDP协议:用户数据报协议

    特点 : 面向无连接,数据不安全,不管对方开不开机,存不存在

    数据的发送和接受器

    • DategramSocket

    数据包类(存数据)

    • DategramPacket

    发送端:

    package manyMessageSocket;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    public class UDPSender {
            public static void main(String[] args)  throws Exception{
                //接受和发送器(发送器)
                DatagramSocket ds =  new DatagramSocket();
                while (true) {
                    Scanner sc = new Scanner(System.in);
                    System.out.println("输入要发送的内容");
                    String sendMsg = sc.nextLine();
                    //byte[] bs = sendMsg.getBytes();
                    //封装 数据包 类
                    DatagramPacket dp = new DatagramPacket(sendMsg.getBytes(), sendMsg.length(), InetAddress.getByName("127.0.0.1"), 12345);
                   ds.send(dp);
                    System.out.println("数据发送ok");
                }
        }
    }
    
    

    接收端:

    package manyMessageSocket;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class UDPRevicer {
        public static void main(String[] args)  throws Exception{
    
            //接收端必须有一个接收的端口号(接收器)
            DatagramSocket ds =  new DatagramSocket(12345);
            while (true) {
                byte[] bs = new byte[1024];
                DatagramPacket dp = new DatagramPacket(bs, bs.length);
                System.out.println("等待接受数据....");
                ds.receive(dp);
                System.out.println("接受ok");
                //获取发送端的地址
                InetAddress sendAdd = dp.getAddress();
                System.out.println("发送端地址" + sendAdd.getHostAddress());
                //获取发送端的数据
                byte[] data = dp.getData();
                //获取发送端数据的长度
                int len = dp.getLength();
                String reciveMsg = new String(data,0,len);
                System.out.println("接收到的内容:" + reciveMsg);
               System.out.println("==================================================================================");
            }
        }
    }
    
    

    结果:(哪位大佬解释一下udp传输消息时候为什么会有乱码)

    发送端
    在这里插入图片描述
    接收端:
    在这里插入图片描述

    展开全文
  •  今天是:2018年6月1日 主题:Netty的网络协议:WebSocketUDP  一、WebSocket协议   WebSocket协议是完全重新设计的协议,旨在为Web上的双向数据传输问题提供一个切实可行的解决方案,使得客户端和服务器之间...

    由于近期开发一个中型的物联项目,带着十来个兄弟从底层硬件到无线局域通信到通用网关到netty高可用框架到spring cloud的后台开发到移动端APP开发到WEB前端的开发整体框架的搭建,虽然很辛苦,但我一直在给兄弟们说我们要三年内在物联行业占有一席之地,期待项目的成功。就因为这样,我写出了这个netty自学框架,虽然也是开始学习,我想通过项目的历练肯定对大家都有用,加油!

          今天是:2018年6月1日          主题:Netty的网络协议:WebSocket和UDP

          一、WebSocket协议

          WebSocket协议是完全重新设计的协议,旨在为Web上的双向数据传输问题提供一个切实可行的解决方案,使得客户端和服务器之间可以在任意时刻传输消息,因此,这也就要求它们异步低处理消息回执。下图是WebSocket的应用程序逻辑:

                                

            1、添加WebSocket支持

                  我们的应用程序将采用下面的约定:如果被请求的URL以/ws结尾,那么我们将会把该协议升级为WebSocket;否则,        服务器将使用基本的HTTP/S。

                                 

          2、处理WebSocket帧

                                  

        二、UDP协议

          面向连接的传输(如TCP)管理了两个网络端点之间的连接的建立,在连接的生命周期内的有序和可靠的消息传输,以及最后 ,连接的有序终止。TCP连接就像打电话,其中一系列的有序消息将会在两方向上流动。相反,UDP则类似于往邮箱中投入一叠明信片。你无法知道它们将以何种顺序到达它们的目的地,或者它们是否所有的都能够到达它们的目的地。UDP[所有的握手以及消息管理机制的开销都已经被消除了,因此比TCP快很多,UDP很适合那些能够处理或者容忍消息丢失的应用程序,但不适合那些处理金融交易的应用程序。

         1、在广播中使用Netty的UDP相关类

                     

                 

             

    展开全文
  • 转自:http://blog.csdn.net/sinat_31057219/article/details/72872359https://www.jianshu.com/p/42260a2575f8TCP/IP协议栈主要分为...(高速公路)TCP和UDP:传输层协议;(卡车)HTTP:应用层协议;(货物)。HT...

    转自:

    http://blog.csdn.net/sinat_31057219/article/details/72872359

    https://www.jianshu.com/p/42260a2575f8


    TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层, 
    每层都有相应的协议,如下图

    IP:

    网络层协议;(高速公路)

    TCP和UDP:

    传输层协议;(卡车)

    HTTP:

    应用层协议;(货物)。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。

    SOCKET:

    套接字,TCP/IP网络的API。(港口码头/车站)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    TCP/IP:

    代表传输控制协议/网际协议,指的是一系列协议,TCP/IP 模型在 OSI 模型的基础上进行了简化,变成了四层,从下到上分别为:网络接口层、网络层、传输层、应用层。与 OSI 体系结构对比如下: 

    TCP/UDP区别:

    TCP

    (传输控制协议,Transmission Control Protocol):(类似打电话) 
    面向连接、传输可靠(保证数据正确性)、有序(保证数据顺序)、传输大量数据(流模式)、速度慢、对系统资源的要求多,程序结构较复杂, 
    每一条TCP连接只能是点到点的, 
    TCP首部开销20字节。

    UDP

    (用户数据报协议,User Data Protocol):(类似发短信) 
    面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单 , 
    UDP支持一对一,一对多,多对一和多对多的交互通信, 
    UDP的首部开销小,只有8个字节。

    tcp三次握手建立连接:

    第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 
    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

    主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话; 
    主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话; 
    主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。 
    三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

    Websocket

    Websocket协议解决了服务器与客户端全双工通信的问题。

    注:什么是单工、半双工、全工通信? 
    信息只能单向传送为单工; 
    信息能双向传送但不能同时双向传送称为半双工; 
    信息能够同时双向传送则称为全双工。

    websocket协议解析 
    wensocket协议包含两部分:一部分是“握手”,一部分是“数据传输”。

    WebSocket和Socket区别

    可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。

    HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。

    WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 
    它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

    参考:

    揭开Socket编程的面纱

    图解TCP-IP协议

    Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)

    WebSocket与TCP/IP

    websocket 历史及使用详解

    WebSocket 教程



    一、这一大堆关键词之间到底有啥区别?

    有名字就有定义,理解的前提从来都是对定义有所了解。就好比现在让你形容一下梯形的定义,如果你不知道定义,你就可能把平行四边形当做特殊的梯形处理,也就有可能把TCP和Socket搞混,更加会纠结TCP连接与Socket连接以及HTTP的长/短连接之间到底有啥区别。

    其实有了区别才好理解。但在这之前首先得理清一个概念,那就是OSI七层模型,以及所谓的五层模型,四层模型到底是什么鬼?

    OSI七层模型是万能的国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连的理想标准,说白了理想和现实的差距就是七层模型和五层模型的差距。具体分类如下表:

    七层模型五层模型四层模型
    应用层  
    表示层应用层应用层
    会话层  
    传输层传输层传输层
    网络层网络层网络层
    数据链路层数据链路层链接层/实体层
    物理层物理层  

    七层模型的上三层归为应用层即为TCP/IP五层模型,五层模型的下两层归为链接层或者说实体层即为四层模型。
    也就是说,所谓的五层或者四层,其实可以认为是方便理解而形成的潜规则,而具体的实施肯定还是得根据七层的标准来。毕竟每一层都有每一层各自的功能,而为了完成每一层的功能,就需要大家遵守相关的规则,也就是协议。所以,对模型分层没必要太在意,五层也好,四层也罢,对于这些看不见摸不着的东西,你只要知道,互联网是分层的,来来去去加起来也就这么几层就够了。

    那么,回到第一个问题,这一大堆关键词之间到底有啥区别?

    • 从本质上来区分,HTTP,WebSocket,TCP,UDP,IP都是协议,而TCP/IP是不同协议的组合,你也可以称之为协议栈,协议族,TCP/IP模型等等都可以,你开心就行,反正都是虚无的不能吃的东西,都是为了完成对应功能而制定的统一规则。
      而Socket(套接字)才是真正能操作的东西。Socket的本质是API,是先人对TCP/IP协议族的抽象或者说封装,它就像一个门面,给你一个操作TCP/IP协议的入口,来建立Socket连接。值得一提的是,此Socket是指网络编程下的Socket,而不是Unix中的Socket。虽然概念相似,但是Unix中的Socket不是基于这些乱七八糟的协议,而是基于操作系统本身的文件系统。

    • 从分层上来区分,HTTP,WebSocket是应用层协议,TCP,UDP是传输层协议,IP是网络层协议。

    二、这些关键词之间具体有什么联系?

    1.TCP和UDP

    TCP是面向连接的一种传输控制协议。TCP连接之后,客户端和服务器可以互相发送和接收消息,在客户端或者服务器没有主动断开之前,连接一直存在,故称为长连接。特点:连接有耗时,传输数据无大小限制,准确可靠,先发先至。
    UDP是无连接的用户数据报协议,所谓的无连接就是在传输数据之前不需要交换信息,没有握手建立连接的过程,只需要直接将对应的数据发送到指定的地址和端口就行。故UDP的特点是不稳定,速度快,可广播,一般数据包限定64KB之内,先发未必先至。

    2.HTTP

    HTTP是基于TCP协议的应用,请求时需建立TCP连接,而且请求包中需要包含请求方法,URI,协议版本等信息,请求结束后断开连接,完成一次请求/响应操作。故称为短连接。
    而HTTP/1.1中的keep-alive所保持的长连接则是为了优化每次HTTP请求中TCP连接三次握手的麻烦和资源开销,只建立一次TCP连接,多次的在这个通道上完成请求/响应操作。
    值得一提的是,服务器无法主动给客户端推送消息。

    3.WebSocket

    WebSocket也是一种协议,并且也是基于TCP协议的。具体流程是WebSocket通过HTTP先发送一个标记了 Upgrade 的请求,服务端解析后开始建立TCP连接,省去了HTTP长连接每次请求都要上传header的冗余,可以理解为WebSocket是HTTP的优化,但WebSocket不仅仅在Web应用程序上得到支持。

    4.Socket连接和TCP连接

    其实这就是一个文字游戏而已,建立Socket连接需要至少一对Socket(套接字),而创建Socket连接可以指定不同的传输层协议,即TCP或UDP,所以当采用TCP建立连接时,该Socket连接就视为一个TCP连接。而采用UDP则是无连接的。

    5.Socket和WebSocket

    这两个虽然名字差不多,但却是两个完全不同的概念,就好比Java和JavaScript一样毫无关系。Socket是一套协议封装后的接口,用于建立Socket连接,而WebSocket虽然是Html5的产物,但也不仅仅局限于浏览器的应用程序,许多语言都提供了WebSocket的支持,比如C,C++,Python等。

    6.HTTP、WebSocket与TCP的关系

    HTTP通信过程属于“你推一下,我走一下”的方式,客户端不发请求则服务器永远无法发送数据给客户端,而WebSocket则在进行第一次HTTP请求之后,其他全部采用TCP通道进行双向通讯。所以,HTTP和WebSocket虽都是基于TCP协议,但是两者属于完全不同的两种通讯方式。

    能比较的都比较了,附上一张关系图强化理解。其实,如果不是专攻网络方面,作为一个程序猿,了解了不同的通讯方式及其对应的优缺点,就可以确定其应用的场景。而这些,就已经基本够用了。

    展开全文
  • 在客户端,new WebSocket 实例化一个新的 WebSocket 客户端对象,连接类似 ws://yourdomain:port/path 的服务端 WebSocket URL,WebSocket 客户端对象会自动解析并识别为 WebSocket 请求,从而连接服务端端口,执行...
  • 整个编码过程在Android studio 3.6.1中进行的,不要忘记申请网络权限哦,全篇...socket和websocket是基于tcp/udp协议的编程接口。 一、相关知识 网络体系结构 网络体系结构有三种,OSI体系结构、TCP / IP体系结构、...
  • websocket通信和UDP通信websocket通信UDP通信 websocket通信 首先安装websockets模块,我使用的是pycharm,在点击pycharm下方Terminal选项,输入: pip install websockets 显示successful什么的就安装成功了。 ...
  • WebSocket测试工具

    千次下载 热门讨论 2015-11-19 15:58:21
    这是一个测试WebSocket的一个小工具,分别有两个连接WebSocket服务端的地址输入,对应的相同的发送按钮,以及有对应的发送消息框和接收消息框!
  • 这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。 TCP三次握手的过程如下: 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。 服务器端收到SYN...
  • 谈谈http的长连接websocket的长连接

    千次阅读 2019-07-31 18:37:12
    WebSocket与Socket的关系 Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在...
  • TCP和UDP都是网络中传输层协议,但如果要构建高效的网络应用,就应该从传输层下手。对于常见的应用场景,无须从应用层协议入手构建自己的应用,使用经典的HTTP或者SMTP等就够用了。 HTTP HTTP的报文可以通过下面这样...
  • 2.WebSocket:应用层协议,高效的解决Http协议在请求后必须长时间等待,采用全双工通信,实现了多路复用,在webSocket协议下客服端和浏览器可以同时发送信息。3.Socket:并不是协议,是应用层与传输层间的一...
  • websocket连接经过zuul网关的坑

    万次阅读 2018-09-07 16:31:31
    之前的项目中,使用zuul网关统一过滤域名,为了管理方便,想要尝试看看能不能使用zuul管理websocket连接。 现象描述 高版本的websocket在第一次http请求后,使用的是更快速的tcp连接 zuul网关只能管理http请求...
  • vue+node 建立webSocket 连接

    千次阅读 2020-01-13 11:18:13
    WebSocket 教程--阮一峰 WebSocket其实没那么难 Vue中使用websocket的正确使用方法 webSocket 简介 首先,WebSocket是一种通信协议,区别于HTTP协议,HTTP协议只能实现客户端请求,服务端响应的这种单项通信。...
  • TCP、UDP、HTTP、SOCKET、WebSocket之间的区别

    万次阅读 多人点赞 2017-06-05 22:56:19
    (高速公路)TCP和UDP:传输层协议;(卡车)HTTP:应用层协议;(货物)。HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,...
  • 想要实现点对点通讯,就要理解STOMP的不同操作,对应的Spring Websocket是如何工作的? -
  • Netty-WebSocket连接推送服务

    万次阅读 2016-09-11 18:38:38
    转自:http://blog.csdn.net/sinosoft_fesco_12138/article/details/50380256 November 25, 2015 推送服务 推送服务 几种消息推送技术比较 ...Comet:长连接机制,同样由浏览器端主动发起,但Ser
  • 【系列二】长连接,短连接WebSocket介绍(含http1.0,1.1,2.0相关) https://www.haorooms.com/post/long_lianjie_websocket 2018年5月5日10567次浏览 前言 上一节讲了长轮询和轮询及其实现,这节讲一讲长连接、...
  • http、websocket、长连接、短连接(一)

    千次阅读 2018-07-06 19:28:14
    这一篇先讲一下http的长短连接的问题 ...HTTP的长连接和短连接本质上是TCP长连接和短连接。... IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,...TCP协议是可靠的、面向连接的。...
  • WebSocket与消息推送 TCP UDP HTTP等介绍

    千次阅读 2018-12-25 11:26:45
    目录 一、Socket简介 二、WebSocket简介与消息推送 三、WebSocket客户端 四、WebSocket服务器端 五、测试运行 六、小结与消息推送框架 6.1、开源Java消息推送框架 Pushlet ... 7.2、DotNet服务器端手动连接...
  • 写在前面,公司最近在有关于通过手机或者硬件上报数据给服务器的一个项目,涉及到Socket、UDP传输的相关知识,在此记录下学习相关知识的过程。 首先我们来看下网络的七层协议,下面是协议层从底层至顶层的一个模型图...
  • 转自: ...http和websocket的长连接区别 Socket是什么 TCP/IP TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。...
  • WebSocket是HTML5出的协议,,也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) ajax 轮询 场景再现:客户端:啦啦啦,有没有新信息(Request) 服务端:没有...
  • 缺点:操作系统:较耗内存,支持连接数有限、设计:协议较复杂,自定义应用层协议、网络:网络差情况下延迟较高、传输:效率低于UDP协议 特性:面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、...
  • 最近在做一个实验,接收udp信号发送过来的卫星航迹数据,在后台解算出它的航迹数据,然后将航迹数据发送到浏览器前端,将卫星的航迹图在浏览器前端可视化出来。 一、接收udp信号数据,在后台对原始数据解析解算 上...
  • 超快速和低延迟异步套接字服务器和客户端C#.NET Core库,支持TCP,SSL,UDP,HTTP,HTTPS,WebSocket协议和解决方案。 内容 产品特点 跨平台(Linux,OSX,Windows) 异步通讯 支持的传输协议: , , , 支持的...
  • swoole实现websocket连接,Timer定时器

    千次阅读 2018-06-13 16:35:36
    PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS...
  • ... ... ... ...当在客户端输入URL地址,获取服务器的资源,内容显示在...UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。RFC 768 [1] 描述了 UDP。   tcp和udp的区别?      
  • 2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,748
精华内容 3,099
关键字:

websocket连接udp