摘要:直接说结论:长连接:TCP连接一直不断开的连接keep-alive能实现长连接。 1.但是有时间限制,最多时间长一些而已 2.需要服务端也支持keep-alive,因为TCP连接的断开是双向的,不是客户端说我要保持连接就行keep-alive实现的长连接和websocket的长连接不同: keep-
阅读全文
随笔分类 - Socket/WebSocket/IO模型/生产者消费者
1
摘要:直接说结论:长连接:TCP连接一直不断开的连接keep-alive能实现长连接。 1.但是有时间限制,最多时间长一些而已 2.需要服务端也支持keep-alive,因为TCP连接的断开是双向的,不是客户端说我要保持连接就行keep-alive实现的长连接和websocket的长连接不同: keep-
阅读全文
摘要:理论: 它基于TCP传输协议,并复用HTTP的握手通道,属于应用层协议 Socket 是传输控制层协议,WebSocket 是应用层协议。 建立连接 交换数据 数据帧格式 维持连接 1.建立连接 首先,客户端发起协议升级请求。可以看到,采用的是标准的HTTP报文格式,且只支持GET方法。[将数据放到
阅读全文
摘要:1.Tornado的基本使用2.Tornado源码剖析 scrapy异步IO模块:理解为socket客户端tornado异步非阻塞:理解为socket服务端 客户端socket异步:(scrapy) """ 目标:单线程实现并发HTTP请求 1.socket 2.HTTP协议 3.IO多路复用 流程
阅读全文
摘要:文章来自:https://www.cnblogs.com/liangxiaofeng/p/5230858.html 从 http 协议说起 1996年IETF HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展。这种分布式、无状态、基于TCP
阅读全文
摘要:select多并发socket例子: #_*_coding:utf-8_*_ __author__ = 'Alex Li' import select import socket import sys import queue server = socket.socket() server.setb
阅读全文
摘要:完全来自:http://www.cnblogs.com/alex3714/articles/5876749.html 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 本文讨论的背景是Linux环境下的net
阅读全文
摘要:http://www.cnblogs.com/alex3714/articles/5248247.html 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求; (2)每收到一个请求,创建一个新的线程,来处理该请求; (3)每收到一个请求,放入
阅读全文
摘要:一、异步爬网页 ''' 协程并发爬网页 ''' from urllib import request import gevent,time from gevent import monkey # 让gevent知道urllib里的哪些操作属于IO操作 monkey.patch_all() # 标记当
阅读全文
摘要:一、协程简介、引子 ''' 协程:异步IO,队列,缓存 Nginx效率高就是用了异步IO 协程是一种用户态的轻量级线程。又称微线程,怎么理解呢?后面会说 CPU只认识线程,不会像线程一样吧上下文保存在CPU寄存器,协程是用户控制的。 协程能保留上一次调用时的状态,单线程下实现并发效果 协程的好处:
阅读全文
摘要:''' queue队列,什么是队列?排队干一件事,谁去维护排队的关系?预防插队等 队列是一个有顺序的容器,有列表了还要队列干什么。 根本区别是列表里拿走一个数据,数据还在里面。队列是数据取走了就没了 为什么要用队列?提高双方效率,解耦合,生产者向队列里放,(队列),消费者从队列里取 1、先入先出 q
阅读全文
摘要:''' 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行 红绿灯线程和车的线程会相互依赖 这种场景怎么实现? 事件 切换一次灯就是一次事件,这次事件的变化造成其他状态的变化 事件是用于线程之间的数据同步的。事件变化其他线程相应作出变化 应
阅读全文
摘要:递归锁: ''' 递归锁: 需求:有多道门,同时只允许一个线程进门 如果用之前的锁,进来的时候进来了,出去的时候找不到对应的锁 下面的程序中,锁的形象表示: { run3 { run1 } { run2 } } 说明:这里有三把锁,如果用的是普通锁,进到run1里面就出不来了。因为找不到哪一把钥匙
阅读全文
摘要:进程和线程的概念,区别: 什么是线程????首先,计算机所有指令的执行都是CPU运算,CPU有规则,线程是操作系统能调度的最小单位线程可以简单理解为一堆指令做每一件事背后都是CPU在运算,例如画图、qq这些应用软件寄生在操作系统上画图和qq是独立的软件,各自分一块独立的内存空间硬盘--内存--CPU
阅读全文
摘要:socketserver简单介绍 ''' socketserver:是对socket的封装,实现并发处理 前两个TCP,UDP常用,后两个不常用 ''' import socketserver socketserver.TCPServer(server_address="",RequestHandl
阅读全文
摘要:粘包client.send(data1)client.send(data2)这两次send紧挨在一起,处理的时候会放在一起发过去在Linux里每次都粘包,Windows里面某次会出现粘包在两次send中间放一个time.time(0.5)可以解决这个问题,这个比较low为什么只有TCP粘包,UDP没
阅读全文
摘要:客户端: import socket client = socket.socket() client.connect(("127.0.0.1", 9999)) while True: cmd = input(">>").strip() if not cmd: # 不能发送空字符串,否则在接收端的re
阅读全文
摘要:最近在使用python进行网络编程开发一个通用的tcpclient测试小工具。在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题。这里,简要介绍一下判别数据接收接收完成常用的三种方法: 1.基础数据接收法: 使用基础数据接收法时,当
阅读全文
摘要:一、socket处理单个连接 recv方法不是可以随便接收多大的数据都可以。官方建议是8KB, 即conn.recv(8192) import socket client = socket.socket() ''' 等价于client = socket.socket(family=socket.AF
阅读全文
摘要:''' Socket网络编程: --应用层:http smtp dns ftp ssh snmp dhcp... 无论协议是什么本质上都是数据交换,总结为两种方式:收和发 --传输层(端口Port) TCP (UDP) --网络层(包IP地址) IP --数据链路层(报文mac地址) TCP三次握手
阅读全文
1
|