ysbbs

Let's start BB !


  • 首页

  • 归档

  • 关于

  • 标签

HTTP协议介绍

发表于 2019-03-13 | | 阅读次数

HTTP协议介绍的文章很多,但这篇写的比较详细,转载来了。


转自:

作者: 阮一峰

原文:http://www.ruanyifeng.com/blog/2016/08/http.html

HTTP协议介绍

HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。

本文介绍 HTTP 协议的历史演变和设计思路。

img

阅读全文 »

守护进程

发表于 2019-03-12 | | 阅读次数

旋风式介绍

守护进程(daemon)是没有终端的,不依赖于终端的程序。

作为系统中的一个后台进程。周期性的执行某些任务,或者等待某个事件的发生。不会随用户注销而退出。

创建守护进程:不能是组长进程。

通过fork子进程,令父进程结束,

子进程setid()创建新会话,脱离控制终端。

阅读全文 »

Linux线程同步笔记

发表于 2019-03-12 | | 阅读次数

互斥锁

  • 创建互斥锁

    • pthread_mutex_t mutex;
  • 使用例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //创建一把互斥锁
    pthread_mutex_t mutex;
    void* funcA_num(void* arg)
    {
    for(int i=0;i<MAX; ++i)
    {
    // 访问全局变量之前加锁
    //如果Mutex被锁上了,代码阻塞在当前位置
    pthread_mutex_lock(&mutex);
    int cur = number;
    cur++;
    number = cur;
    printf("Thread A,id = %lu,number = %d\n",pthread_self(),number);
    //解锁
    pthread_mutex_unlock(&mutex);
    usleep(10);
    }
    return NULL;
    }
  • 互斥锁的特点

    • 多个线程访问共享数据的时候是串行的
  • 使用互斥锁的缺点

    • 效率低
  • 互斥锁使用步骤:

    • 创建互斥锁:pthread_mutex_t mutex;
    • 初始化这把锁:pthread_mutex_init(&mutex,NULL);
    • 寻找共享资源:
      • 操作共享资源代码之前加锁,操作完解锁
        • pthread_mutex_lock(&mutex);
        • 。。。临界区,尽可能小
        • pthread_mutex_unlock(&mutex);
阅读全文 »

进程间通信笔记(二)

发表于 2019-03-12 | | 阅读次数

信号

信号是由内核产生并发送的,

信号可以用于进程和进程之间通信,也可以用于内核和进程间的通信。

虽然我们用的最多的是用信号杀死进程。但实际上我们我们可以捕捉信号做特定处理。

特点

  • 简单
  • 携带的信息量少
  • 使用在某个特定的场景中
阅读全文 »

Linux多线程笔记

发表于 2019-03-12 | | 阅读次数

进程创建完线程之后,地址空间没有变化,进程退化成了线程——主线程。

创建出的子线程和主线程共用地址空间,但主线程和子线程有各自独立的pcb,

子线程的pcb是从主线程拷贝来的。

阅读全文 »

进程间通信笔记(一)

发表于 2019-03-10 | | 阅读次数

进程间通信

  • pipe进行父子进程间的通信
  • pipe进行兄弟进程间的通信
  • FIFO进行无血缘关系的进程间通信(FIFO又被称为命名管道)
  • mmap函数进行有血缘无血缘进程间通信
阅读全文 »

同步异步阻塞非阻塞

发表于 2019-03-10 | | 阅读次数

阻塞和非阻塞

  • 阻塞和非阻塞是文件的属性
  • 普通文件:hello.c
    • 默认不阻塞
  • 终端设备: /dev/tty
    • 默认阻塞
    • 管道
    • 套接字

概念

同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由调用者主动等待这个调用的结果。

而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

  1. 阻塞与非阻塞
    阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

作者:严肃

链接:https://www.zhihu.com/question/19732473/answer/20851256

老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

作者:愚抄 链接:https://www.zhihu.com/question/19732473/answer/23434554

IO多路复用 、同步、异步、阻塞非阻塞

同步、异步 是对 调用 来说的

阻塞、非阻塞 是对 进程或者线程 来说的

io多路复用 主要解决 同步非阻塞中反复轮询的问题,使用信号事件驱动进行回调通知

https://www.cnblogs.com/pandang/p/7366781.html

通俗易懂CGI

发表于 2019-03-10 | | 阅读次数

一直对CGI的概念就是客户端交由处理的具体请求事物的后台程序,看到这篇文章通俗易懂的把CGI讲解清楚,往后对自己写后台业务也会有更多理解。

文章转载自CGI

我们知道,服务端要处理用户的请求,必须通过编程语言来编写对应的处理逻辑,而你要做的不仅如此,你碰到的第一个问题就是如何接收用户的TCP请求并解析出HTTP协议格式。

OK,专业的事情交给专业的人来干。必然,我们应该用专业的Web Server(如Nginx、 Apache)来接收和解析TCP请求。而业务处理部分不可能会有开源的东西直接拿来用的,毕竟每一家公司的业务都是不同的,所以需要采用C、C++、Perl、Java、Node、Python等等编程语言来编码,并编译为一个可执行程序。(由于php等脚本语言是解释执行的,所以需要靠对应的php解释器来执行。)

说到这里,问题就来了,Web服务器如何与业务处理程序进行通信呢,以及其通信时传递数据的格式是怎么样的呢。这里就需要一套标准的协议,于是人们创造了CGI协议。 所以能处理CGI协议数据的业务处理程序,就被称为CGI程序。

Web Server和CGI程序通过环境变量、标准输入、标准输出进行通信。
协议与语言无关,只要一门语言支持标准输入、标准输入、读取环境变量,它就可以用来写CGI程序,就是说可以用bash、perl、c语言等来写。

环境变量中存放的是一次请求的相关信息,比如QUERY_STRING、
PATH_INFO、REMOTE_ADDR、REMOTE_HOST、CONTENT_TYPE、CONTENT_LENGTH、REQUEST_METHOD、SERVER_NAME等。 从标准输入读取的数据如表单中post过来的东西。

img

CGI

当客户端发出一个执行CGI程序的请求给服务器以后,服务器根据CGI的程序类别,决定某种数据传递方式,即服务器与CGI程序的沟通方式,这就是编写CGI程序的关键点。一般情况下,服务器与CGI程序之间是通过标准输入输出进行数据传递的。

这种通过标准输入输出来实现服务器与CGI之间的数据传递的标准,对于基于文件的UINX系统尤其适用

对服务器与CGI程序而言就是:服务器的标准输出与CGI程序的标准输入相连接,服务器标准输入与CGI的标准输出相连接。如此,就构成了一个完整的数据循环通路。

事实上,每个CGI程序的环境变量集在该CGI程序开始执行到终止,其对应的环境变量集就失效了,也就是对应环境变量集生存期与CGI程序是一致的.

阅读全文 »

Shell命令笔记

发表于 2019-03-09 | | 阅读次数
  • find 目录 -name “file_name”
    • find ~ -name "helloword.cpp"
  • grep -r “context” 目录 -n
    • grep -r "iosteam" ~
    • -n 显示具体内容在文件第多少行
  • 压缩格式

    • tar其实是归档工具(打包工具)
      • c 创建归档文件
      • x 释放归档文件
      • v 打印提示信息
      • f 指定压缩包名字
      • z 使用gzip压缩 -xxx.tar.gz
      • j 使用bzip2方式压缩 -xxx.tar.bz2
    • 常用压缩格式:
      • .gz
      • .bz2
    • 压缩 tar czvf test.tar.gz file1 file2 docment1 (原材料,可以是文件可以是目录,可多个)
    • 解压 tar zxvf test.tar.gz -C 要解压的目录
  • file xxx:可以查看文件的文件类型

  • man文档章节

    如果有些命令如printf会有重名,需要查哪块具体要指定好具体章节man 3 printf

    • 1:可执行程序或shell命令
    • 2:系统调用(内核提供的函数)
    • 3:库调用(程序库中的函数)
    • 4:特殊文件(通常在/dev)
    • 5:文件格式和规范(例如:/etc/passwd)
    • 6:游戏
    • 7:杂项
    • 8:系统管理命令(通常只针对root用户)
    • 9:内核例程【非标准】
  • env :查看linux所有环境变量

  • stat:stat hello.c查看文件属性

ssh和sftp的关系

发表于 2019-03-09 | | 阅读次数

SSH

SSH(Secure Shell):,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH是由客户端和服务端的软件组成的:服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接; 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
从客户端来看,SSH提供两种级别的安全验证:第一种级别(基于口令的安全验证); 第二种级别(基于密匙的安全验证)。
SSH 主要有三部分组成: 传输层协议 [SSH-TRANS] ;用户认证协议 [SSH-USERAUTH] ;连接协议 [SSH-CONNECT]。

SFTP

SFTP(Secure File Transfer Protocol):安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

1…345…11
Yang Shuai

Yang Shuai

105 日志
89 标签
© 2021 Yang Shuai
由 Hexo 强力驱动
主题 - NexT.Mist