socket函数

普通socket, rpc, websocket,http等

霸气de小男生 提交于 2019-11-27 12:14:24
rpc的用法是客户端直接调用服务端的函数,其实他就是把数据传给服务端,服务端处理完以后返回给客户端, websocket是把数据发出去,他是在tcp之上一层的,他有发送结束标志,就是一次ws.send的结束,服务器会知道,服务器按照协定可以拿出完整的一次ws.send那么区别就出来了:websocket并不关系对方拿到数据后处理的过程是否完成,而rpc是和处理过程相关的,其实他们不是同一个级别的东西。如果是 短连接的 话, rpc更像是http, rpc适合 做数据同步 ,websocket适合 做流 ,当然也可以用websocket实现rpc https://www.jianshu.com/p/3b5955940998 这个问题其实是有理解误区的,首先 http 和 rpc 并不是一个并行概念。 rpc是远端调用协议, 包含 传输协议和编码协议。 传输协议包含: 如著名的 [gRPC]( grpc / grpc.io** ) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。 编码协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf binpack 等。 因此我理解的你想问的问题应该是: 为什么要使用自定义 tcp 协议的 rpc 做后端进程通信? 要解决这个问题就应该搞清楚 http 使用的 tcp 协议,和我们自定义的

进程池和线程池 协程 # 33

六眼飞鱼酱① 提交于 2019-11-27 11:13:45
day33进程池和线程池 0.内容回顾 1 """""" 2 """ 3 昨日内容回顾 4 """ 5 6 """ 7 1.TCP服务端实现并发 8 1.将不同的功能尽量拆分成不同的函数 9 拆分出来的功能可以被多个地方使用 10 1.将连续循环和通信循环拆分成不同的函数 11 2.将通信循环做成多线程 12 13 ps: 14 1.端口报错解决策略: 15 server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 16 2.线程并发,在同一个端口下进行 17 进程并发不同端口快速切换,进程需要进行快速回收 18 19 """ 20 21 """ 22 2.GIL(全局解释器锁) 23 1.在CPython解释器才有GIL的概念,不是Python的特点 24 2.GIL也是一把互斥锁,将并发变为串行,牺牲了效率,但是提高了数据的安全性 25 26 ps: 27 1.针对不同的数据 应该使用不同的锁去处理 28 2.自己不要轻易的处理锁的问题 哪怕你知道acquire 和 release 29 当业务逻辑稍微复杂的一点情况下 极容易造成死锁 30 31 CPython中GIL锁的存在是因为Python的内存管理不是线程安全的 32 """ 33 """ 34 3.内存管理 35 1.引用计数:值与变量的绑定关系的个数 36

双重循环实现函数确保调用

时光总嘲笑我的痴心妄想 提交于 2019-11-27 10:37:27
#define wrap_call(dtype, x) \ do { \ dtype result; \ do { \ result = x; \ } while ((result == -1) && (errno == EINTR)); \ return result; \ } while (0) int accept_noeintr(int socket, struct sockaddr *restrict address,socklen_t *restrict address_len) { wrap_call(int, accept(socket, address, address_len)); }    来源: https://www.cnblogs.com/hshy/p/11359907.html

【Django】Web框架本质

喜你入骨 提交于 2019-11-27 02:54:39
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 原文: http://106.13.73.98/__/32/ @ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么? 所以

【Django】Web框架本质

我们两清 提交于 2019-11-27 02:51:38
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 原文: http://106.13.73.98/__/32/ @ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么? 所以

python全栈开发中级班全程笔记(第三模块、第二章(网络编程))

家住魔仙堡 提交于 2019-11-26 23:57:10
            python全栈开发第三模块 第二章:网络编程 一、计算机基础与网络   1、一套完整的计算机系统:由三大部分组成:①应用软件 ②系统软件 ③计算机硬件 ###软件依赖系统,系统操作控制硬件###   2、网络课程目标:让大家写一个 C (client) S (server) 架构软件 (基于网络)    2.1、什么叫网络:网络是在同一通信区域内通过互联网协议(网络通讯标准),实现各个网络终端的互通互联,从而达到相互通讯传输数据    简单来讲:网络就是底层的物理连接介质加上互联网协议    2.2、互联网协议分为以下几种:    2.21、os七层协议:①应(应用层),②表(表示层),③会(会话层),④传(传输层),⑤网(网络层),⑥数(数据链层),⑦物(物理层)    2.22、五层协议:前三层(应、表、会)统称为应(应用层)、传(传输层)、网(网络层)、数(数据链层)、物(物理层) 二、五层协议详解   1、物理层:传输二进制数据   2、数据链层:主要任务是按照一定语言标准,把文件转换成指定格式的二进制,交给物理层   2.1 以太网(Ethernet)MAC 协议(网络中最常见的传输协议)    其中 MAC 协议中规定: ①:一组电信号,称之为组个数据报(或者叫数据帧) ②:一组数据报分为报头(head)和数据(data)两部分 ③

Zygote启动及其作用

ぐ巨炮叔叔 提交于 2019-11-26 18:41:39
目录 1、Zygote简介 2、Zygote进程如何启动   2.1 init.zygote64_32.rc文件   2.2 查看ps信息   2.3 启动 3、Zygote作用   3.1 启动system_server   3.2 查看与验证Zygote启动systemserver   3.3 Zygote启动其他子进程 4、总结 1、Zygote简介 1.1 系统启动流程 从按下电源到看到launcher,手机的启动是一个非常复杂的过程。 bootloader是手机上电之后第一个运行的程序,其作用是硬件的初始化,其作用类似于PC机的bios。 bootloader完成其工作后,将 Linux kernel镜像拷贝到内存中。完成剩余的与硬件平台相关的初始化工作,比如文件系统,驱动模块。最后启动第一个用户进程-init 进程并等待用户进程的执行。 用户空间的第一个进程init 1.2 zygote理解 在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育(fork)出来的。由于Zygote进程在Android系统中有着如此重要的地位,本文将详细分析它的启动过程。---老罗 android系统中创建java世界的盘古 创建新进程的女娲。 ---邓凡平 2、Zygote进程如何启动 2.1 init.zygote64_32

Poco::TCPServer框架解析【转】

不打扰是莪最后的温柔 提交于 2019-11-26 18:32:26
原文:http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程、文件、流,网络协议包括:HTTP、FTP、SMTP 等,还提供 XML 的解析和 SQL 数据库的访问接口。不仅给我的工作带来极大的便利,而且设计巧妙,代码易读,注释丰富,也是非常好的学习材料,我个人非常喜欢。POCO的创始人在这个开源项目的基础上做了一些收费产品,也成立了自己的公司,"I am in the lucky position to work for my own company",真是让人羡慕啊。 POCO C++ Libraries 基于POCO的产品 Poco主页: http://pocoproject.org/ Poco文档: http://pocoproject.org/docs/ 创始人主页: http://obiltschnig.com/ 公司主页: http://www.appinf.com/ 我主要用过Net,Data,XML部分,Net里对socket的封装类,实现TCP,HTTP,SMTP协议的框架,Data里对MySQL接口封装,XML里对DOM标准的实现。我目前主要是做C++网络编程

Tomcat中常见线程说明

。_饼干妹妹 提交于 2019-11-26 18:04:05
本文讲述了Tomcat的常见线程的功能、名称、线程池和配置等信息,其中源码来自于Tomcat 6.0.18。 Work线程 功能 HTTP请求的处理线程(非NIO)。当有新的http请求进来后,则会从线程池中获得一个线程Work对象,调用Work.assign函数,将新到的http请求分配给这个线程。 名称 名称是http-[IpAddr]-[Port]-[Number],如http-0.0.0.0-8080-1 这个可以从Http11Protocol中的setName函数和Worker中的start方法得知这个命名方式。 1 public String getName ( ) { 2 String encodedAddr = " " ; 3 if ( getAddress ( ) ! = null ) { 4 encodedAddr = " " + getAddress ( ) ; 5 if ( encodedAddr . startsWith ( " / " ) ) 6 encodedAddr = encodedAddr . substring ( 1 ) ; 7 encodedAddr = URLEncoder . encode ( encodedAddr ) + " - " ; 8 } 9 10 return ( " http- " + encodedAddr +

网络编程入门10

流过昼夜 提交于 2019-11-26 16:18:43
TcpConnection.h void muduo::net::defaultConnectionCallback(const TcpConnectionPtr& conn) { LOG_TRACE << conn->localAddress().toIpPort() << " -> " << conn->peerAddress().toIpPort() << " is " << (conn->connected() ? "UP" : "DOWN"); // do not call conn->forceClose(), because some users want to register message callback only. } void muduo::net::defaultMessageCallback(const TcpConnectionPtr&, Buffer* buf, Timestamp) { buf->retrieveAll(); } typedef std::shared_ptr<TcpConnection> TcpConnectionPtr; class TcpConnection : noncopyable, public std::enable_shared_from_this<TcpConnection> { private: enum