socket

常见RPC开源框架

穿精又带淫゛_ 提交于 2020-03-03 05:52:13
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用! 远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。 最早在 Nelson 的论文中指出实现 RPC 的程序包括 5 个理论模型部分: User User-stub RPCRuntime Server-stub Server 这 5 个部分的关系如下图所示: 这里 User 就是 Client 端。当 User 想发起一个远程调用时,它实际是通过本地调用 User-stub。 User-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。 远端 RPCRuntime 实例收到请求后交给 Server-stub 进行解码后发起向本地端 Server 的调用,调用结果再返回给 User 端。 远程调用原理 比如 A (client) 调用 B (server) 提供的remoteAdd方法:

ServerSocket 与 Socket的区别

▼魔方 西西 提交于 2020-03-03 03:47:14
1.1 ServerSocket类 创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如: ServerSocket MyListener=new ServerSocket(600); 这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监听可能的Client请求,执行如下的语句: Socket LinkSocket=MyListener.accept(); 该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使Server端的程序处于等待状态,程序将一直阻塞直到捕捉到一个来自Client端的请求,并返回一个用于与该Client通信的Socket对象Link-Socket。此后Server程序只要向这个Socket对象读写数据,就可以实现向远端的Client读写数据。结束监听时,关闭ServerSocket对象: Mylistener.close(); 1.2 Socket类 当Client程序需要从Server端获取信息及其他服务时,应创建一个Socket对象: Socket MySocket=new Socket(“ServerComputerName”,600); Socket类的构造函数有两个参数

Python_协程

邮差的信 提交于 2020-03-02 22:26:31
引子   之前我们学习了线程、进程的概念,了解了在操作系统中 进程是资源分配的最小单位,线程是CPU调度的最小单位。 按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建进程、创建线程、以及管理他们之间的切换。   随着我们对于效率的追求不断提高, 基于单线程来实现并发 又成为一个新的课题,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发。这样就可以节省创建线进程所消耗的时间。   为此我们需要先回顾下并发的本质:切换+保存状态   cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长       ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态    一:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率。   为此我们可以基于yield来验证。yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: #1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级

TCP通信粘包问题分析和解决

自古美人都是妖i 提交于 2020-03-02 19:48:32
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。所以UDP不会出现粘包问题。 ==================================================================== 在介绍TCP之前先普及下两个相关的概念,长连接和短连接。 1.长连接 Client方与Server方先建立通讯连接,连接建立后 不断开, 然后再进行报文发送和接收。 2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.

Android第二十一天

夙愿已清 提交于 2020-03-02 19:04:04
一:TCP/IP协议 TCP/IP是一个协议族。 TCP:(Transmission Control Protocol)传输控制协议 IP:(Internet Protocol)互联网协议 四层网络体系结构:物理层(网络接口层)、互联网络层(包含IP协议)、 传输控制层(TCP、UDP)、应用层(http、ftp) (重点理解)TCP协议:面向连接、可靠的协议。(“三次握手”确保)效率较低,耗费性能。 一般用于CS(Client-Server客户端-服务端)结构,用于传输重要的数据。 IP地址:网络上主机的唯一标识地址。 端口(port):具有网络功能的软件的唯一标识。 二:Socket(套接字)、ServerSocket 1.Socket:套接字是两台机器间通信的端点。 public Socket(String host,int port) public OutputStream getOutputStream() 返回此套接字的输出流。 public InputStream getInputStream() 返回此套接字的输入流。 2.ServerSocket:此类实现服务器套接字。 public ServerSocket(int port) public Socket accept() 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。

mysql安装之socket连接问题

微笑、不失礼 提交于 2020-03-02 18:10:45
环境:CentOS:CentOS release 6.7 (Final) MySQL: mysql Ver 14.14 Distrib 5.6.35, for linux-glibc2.5 (x86_64) using EditLine wrapper 安装步骤: 参看百度经验: http://jingyan.baidu.com/article/a378c9609eb652b3282830fd.html 使用MySQL: mysql -u root -p 出现的问题: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 解决办法: 先查找到my.cnf find / -name 'my.cnf' 修改my.cnf [client] default-character-set=utf8 socket=/var/lib/mysql/mysql.sock [mysql] default-character-set=utf8 socket=/var/lib/mysql/mysql.sock 重启mysql,即可 来源: oschina 链接: https://my.oschina.net/u/217398/blog/813087

W5500EVB UDP模式的測试与理解

断了今生、忘了曾经 提交于 2020-03-02 18:07:34
之前的博文中已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)传输数据的实现过程,那么传输控制协议中,UDP也是很经常使用的。这样的无连接的协议在很多其它场合为用户提供了便捷。比方发电子邮件,QQ聊天发收消息等…好,那今天就学习一下。UDP模式在W5500EVB上的简单实现。 一 实验硬件及其连接 二 UDP实验相关知识 W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),用户无需特别关注TCP 和 UDP的实现过程。仅仅需最好对应配置和查询工作就可以。以下主要解说TCP和UDP差别。供參考 1 基于连接与无连接 TCP—传输控制协议提供的是面向连接、可靠的字节流服务。当客户和server彼此交换数据前。必须先在两方之间建立一个TCP连接,之后才干数据传输。TCP提供超时重发。丢弃反复数据,检验数据,流量控制等功能,保证数据能从一端传到还有一端。 每一个数据包的传输过程是:先建立链路、传输数据、然后清除链路。数据包不包括目的地址。受端和发端不但顺序一致,并且内容同样。它的可靠性高。 UDP—用户数据报协议是面向无连接的。每一个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中无论其顺序

struct linger 用法

亡梦爱人 提交于 2020-03-02 16:55:16
Linux下tcp连接断开的时候调用close()函数,有优雅断开和强制断开两种方式。 那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。 linger结构体数据结构如下: #include <arpa/inet.h>struct linger {  int l_onoff;  int l_linger;}; 三种断开方式: 1. l_onoff = 0; l_linger忽略 close()立刻返回,底层会将未发送完的数据发送完成后再释放资源,即优雅退出。 2. l_onoff != 0; l_linger = 0; close()立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,即强制退出。 3. l_onoff != 0; l_linger > 0; close()不会立刻返回,内核会延迟一段时间,这个时间就由l_linger的值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,close()会返回正确,socket描述符优雅性退出。否则,close()会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。需要注意的时,如果socket描述符被设置为非堵塞型,则close()会直接返回值。 具体用法: struct linger ling = {0, 0}

2002 - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13 "权限不够")

浪尽此生 提交于 2020-03-02 15:26:27
2002 - Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (13 “权限不够”) 本地mysql客户端 或 navicae客户端 或 python程序 连接mysql-server时报错。 本机是ubuntu 16.04系统 ,使用命令安装mysql: sudo apt-get install mysql-server mysql-client 本机mysql客户端连接mysql没有问题: mysql mysql -u root -p 但是使用navicate连接mysql时出现此错误: 网上查了很多方法文章,这里总结一下。 情况一: 本地mysql客户端不能连接mysql 错误提醒 socket ‘/var/lib/mysql/mysql.sock’ 这个目录是连接本地mysql通常通过一个Unix域套接字文件进行的,即这个mysql.sock套接字文件配置有问题,本地客户端就不能连接。 ubuntu系统的mysql 配置文件在 /etc/mysql/my.cnf ,在此目录里还有一个mysql.cnf ,这两个文件是通过软连接的同一个文件, 我在my.cnf里添加配置信息,mysql.cnf 里会自动改变 。 使用mysql客户端不能连接到mysql服务端

Java web实现原理

流过昼夜 提交于 2020-03-02 15:24:28
说明 最近在看一本java web和tomcat技术介绍的书籍。故此,希望通过文字总结的方式总结自己学习所获,本篇主要介绍java实现web基本的信息浏览的方法原理。 web的本质 由于技术能力有限,或许我的表述存在某些问题,仅供参考。web网页技术其本质包括三个要素:访问用户、浏览器(软件)、访问地址(Url).三个基本的要素构成了一次简单的网页浏览的过程。其中访问用户为数据被动接收者,浏览器为数据加工者(根据既定规则展示数据),访问地址为数据获取(也可以理解为数据提供方)。由此可见,web的基础就是对于数据的获取和数据的展示,展示本篇不做介绍,主要介绍浏览器如何通过url获取网页数据的。 web实现 web构成主要就两个部分:服务端和客户端。而web的访问其实就是一次简单的net间的数据传输,web是基于TCP/IP协议簇的HTTP来规范通信过程,而基本的通信过程其实就是一次tcp方式连接get的请求过程。浏览器通过get方式获取当前的浏览信息(html或者其他资源文件信息)。如下,简单介绍有关http协议的的基本格式信息内容以及如何通过java程序模拟实现一次简单的网页访问。 1) HTTP协议 HTTP(HyperText Transfer Protocol)为超文本传输协议,这是万维网通信文件均需要遵循的标准。初期是为了专门处理超文本(html)数据传输的方法