【http协议】

  断句 :

    由于tcp协议是基于流的传输协议,也就是在传输层本身是做不到断句的功能的,

    于是断句需要在应用层协议实现。

     最初用回车和换行来标示一套命令的结束 如果信息里面有 \r\n的情况呢

    可以通过转义来解决这个问题,但是转义工作量太大,而且会增加传输大小,

    因为转义字符一般情况比原始字符更大。而且这样也会有一个问题,如果接受到了

    数据了,我们需要转义了第三个字符,吧 %20 转换成 = 那么在内存里buffer里

    %20后面的所有字符都要向前移动。

  当然后来在smtp的协议中有人提出可以用base64进行编码,这样的话就能避免上述问题,

    但是使用base64会增加传输数据本身的内容。就会膨胀1/3。

    但是如果在http协议中也使用这种东西,那么就太浪费带宽了,

    于是在http协议里面,固定增加一个 Content-length字段 用来表示后续数据的大小

    Header和content用 \r\n\r\n分割,这样就解决了问题。

    但是随着互联网的日益发达,有很多情况使用这种方式不能解决问题,比如在线直播,

    于是来提供了trunk模式,就是将内容分段

    

【长连接和短连接,网络推送】

如果我们要实现一个类似微信易一样的app 怎么实现推送机制

我们有两种选择

1  Client轮训Server端,类似每隔个n秒 Client 去Server上面查询

2  Server端主动联系Clinet端 有效期的情况下Server通知Client端 ,让Client去取

然而第一种方法是一个两难的问题

  n大了 就比较节省资源,但是消息的实时性比较低

  n小了 实时性比较高 但是比较浪费资源

而第二种方法也有自己的问题,

大部分的NAT的实现,会导致局域网用户可以主动想Interbet发起TCP连接,但是局域网外部的ip不可以想内部ip主动发起连接。

在网络层心跳中,心跳时间过长,两分钟,那么我们应该在应用层再加一次心跳。这种情况就是为了防止网络的不稳定。

长连接主要解决的问题是 tcp握手连接的开销。

python-高级编程-04的更多相关文章

  1. Python网络编程04 /recv工作原理、展示收发问题、粘包现象

    Python网络编程04 /recv工作原理.展示收发问题.粘包现象 目录 Python网络编程04 /recv工作原理.展示收发问题.粘包现象 1. recv工作原理 2. 展示收发问题示例 发多次 ...

  2. python高级编程:有用的设计模式3

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...

  3. python高级编程:有用的设计模式2

    # -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...

  4. python高级编程:有用的设计模式1

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#设计械是可复用的,某种程序上它对软件设计中觉问题提供的语言 ...

  5. python高级编程技巧

    由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr  ...

  6. python高级编程之选择好名称:完

    由于时间关系,python高级编程不在放在这边进行学习了,如果需要的朋友可以看下面的网盘进行下载 # # -*- coding: utf-8 -*- # # python:2.x # __author ...

  7. python高级编程读书笔记(一)

    python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...

  8. python高级编程之列表推导式

    1. 一个简单的例子 在Python中,如果我们想修改列表中所有元素的值,可以使用 for 循环语句来实现. 例如,将一个列表中的每个元素都替换为它的平方: >>> L = [1, ...

  9. Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍

    原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Gen ...

  10. Python高级编程-Python一切皆对象

    Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...

随机推荐

  1. 20170405JDBC数据查询

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  2. SQL SERVER 2014 缺少Business Intelligence 解决办法

    SQL SERVER 2014安装完所有的数据库工具后,缺少开发工具 Business Intelligence   之解决办法. https://msdn.microsoft.com/en-us/l ...

  3. GreenDao的简单使用说明(五)多表n:m

    在设计一些比较复杂的数据库结构的时候,我们会遇到表之间是n:m的关系,就是常说的多对多的关系,最常用的情况,就是用户权限这块,日常最常见的就是学生与老师的关系了,哪么我们来看一下GreenDao中如何 ...

  4. 微信成为HTML5技术流行的最大推手

    很多热点的事件都是厚积薄发,HTML5就是如此.此前iOS和Android系统已经放弃了Flash,这让HTML5有了一个天然的成长基础.而现在手机硬件的提升和HTML5本身的完善,使得基于HTML5 ...

  5. 22/tcp open|filtered ssh 80/tcp open|filtered http

    22/tcp open|filtered ssh80/tcp open|filtered http nmap不能确定该端口是打开还是过滤,这可能是扫描一个打开的端口,但没有回应.

  6. 对Yii 2.0模型rules的理解(load()无法正确装载数据)

    在实际开发中,遇到数据表新增字段而忘记了在对应模型中rules规则中添加新增的字段,而导致load()方法装载不到新增字段,导致新增字段无法写入数据库中.   解决办法:在新增字段后及时在对应模型ru ...

  7. python+selenium之中类/函数/模块的简单介绍和方法调用

    # coding=utf-8 class ClassA (object): string1 = "这是一个字符串." def instancefunc(self): print ( ...

  8. 洛谷——普及练习场 普及组选手可冲刺训练,提高组选手亦可在此巩固基础。(Loading...)

    简单的模拟 关卡2-1,6 道题 开始普及组的训练!所谓模拟,就是直接根据题意编写,思维难度简单. //T1 铺地毯 #include <cstdio> #define N 10005 i ...

  9. webpack安装包的时候 1程序目录不要在C盘 2路径不要有中文 3用cnpm

    webpack安装包的时候 1程序目录不要在C盘 2路径不要有中文 3用cnpm

  10. 使用FontDialog组件设置字体

    实现效果: 知识运用: FontDialog组件的Font属性 //获取或设置选定的字体 public Font Font  { get;set; } 实现代码: private void butto ...