古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。

Python高级编程和异步I/O并发编程笔记 9 socket编程

Python admin 492℃ 0评论

socket编程是网络编程的基础知识,python socket编程是异步I/O特别是协程中一个非常重要的概念。计算机网络都是由协议组成,计算机网络协议内容非常多,在开发中经常需要使用到其中的知识,推荐《TCP/IP详解》三卷。

HTTP、Socket和TCP的概念

五层网络协议模型

OSI标准网络模型将网络协议划分为7层,一些地方将其划分为5层,主要是另外两层(会话层、表示层)应用非常少。应用层和具体的包相关,对应功能使用不同的协议。TCP和UDP虽然我们可以使用python实现,但是很容易出错,我们一般都直接使用操作系统提供的功能。操作系统也提供了socket,可以理解为一个API,它不属于任何协议,但我们可以利用它和传输层协议打交道。形象的比喻,传输层和以下网络协议类似于国家电网提供的电力资源,而socket类似于一个插座,我们使用“电”不需要关注电是怎么来的。利用socket我们甚至可以自己实现协议,如聊天协议、网站聊天工具等等( 通过socket让应用直接和TCP打交道,自己实现一套协议规则,这样可以实现自己的应用层协议,和HTTP是同一个层级的,而不是使用HTTP) 。这里的例子都是不使用http协议完成的,原因在于http协议的特点是单向,在不开启keep-alive(默认不开启)的情况下,A向B发送数据后,B直接返回数据给A,而B如果有新消息给A则无法完成。一般是使用socket通过TCP协议建立连接,如网站的消息提醒、实时聊天等一般都是基于websocket完成, websocket 也是sockect连接,它的连接是需要主动断开的。

通过socket实现client和server通信

socket编程模式在不同语言中很类似,基本都是如下流程:

socket编程模型

左侧是server端,右侧是client端。server端常见的应用服务器端,client端如pc软件、浏览器等,django就是典型的server端编程,django的socket编程部分在“runserver”会帮我们实现一个非常简单的socket server,部署时是使用uwsgi这样的组件的,真正的server存在于uwsgi中而不是django中,django虽然实现了socket的协议,但是作为一种web框架,一般是不负责socket通信的。web框架一般是使用运行服务器的容器运行的,如Java中的Tomcat、django中的uwsgi。client端编程典型应用就是爬虫。

server端一个特点就是“一直监听客户端的请求”,socket是应用层和传输层之间的接口,socket编程可以基于更种协议,在操作系统中进程间通信也大量使用了socket,socket可以监听在本地(或局域网)或对外IP上上。每一个应用程序仅能占用一个端口。

转载请注明:北凉柿子 » Python高级编程和异步I/O并发编程笔记 9 socket编程

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址