socket

从零开始学django(一)

随声附和 提交于 2020-02-02 08:13:44
一、web应用、http协议、web框架 阅读目录 一 Web应用程序是什么 二 基于SOCKET写一个web应用 一、web应用、http协议、web框架 一 Web应用程序是什么 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。 web应用程序的优点 网络应用程序不需要任何复杂的“展开”过程,你所需要的只是一个适用的浏览器; 网络应用程序通常耗费很少的用户硬盘空间,或者一点都不耗费; 它们不需要更新,因为所有新的特性都在服务器上执行,从而自动传达到用户端; 网络应用程序和服务器端的网络产品都很容易结合,如email功能和搜索功能; 因为它们在网络浏览器窗口中运行,所以大多数情况下它们是通过跨平台使用的 (例如Windows,Mac,Linux等等)

linux网络编程中阻塞和非阻塞socket的区别

流过昼夜 提交于 2020-02-02 03:57:54
原文: http://blog.sina.com.cn/s/blog_4b029ef30100nxcb.html 阻塞socket和非阻塞socket 读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲 区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。 对于非阻塞socket而言,socket的接收缓冲区中有没有数据,read调用都会立刻返回。接收缓冲区中有 数据时,与阻塞socket有数据的情况是一样的,如果接收缓冲区中没有数据,则返回错误号为 EWOULDBLOCK, 表示该操作本来应该阻塞的,但是由于本socket为非阻塞的socket,因此立刻返回,遇到这样的情况,可 以在下次接着去尝试读取。如果返回值是其它负值,则表明读取错误。 因此,非阻塞的rea调用一般这样写: if ((nread = read(sock_fd, buffer, len)) < 0) { if (errno == EWOULDBLOCK) { return 0; //表示没有读到数据 }else return -1; //表示读取失败 }else return nread;读到数据长度 写操作

I/O多路复用之select

大城市里の小女人 提交于 2020-02-02 00:20:02
1、select的些许缺点 回忆一下 select接口 int select ( int nfds , fd _ set *readfds , fd _ set *writefds , fd _ set *exceptfds, struct timeval *timeout ); select需要我们指定文件描述符的最大值,然后取[0,nfds)这个范围内的值查看是在集合readfds,writefds或execptfds中,也就是说这个范围内存在一些不是我们感兴趣的文件描述符,cpu做了一些无用功,poll对她进行了改进,下面就看看poll是怎么做的。 2、poll接口 #include <poll.h> int poll ( struct pollfd *fds, nfds_t nfds, int timeout ); 跟select不同的是,poll不再告知内核一个范围,而是通过struct pollfd结构体数组精确的告知内核用户关心哪些文件描述符(流)。参数nfds指示结构体数组的大小。timeout表示程序员的忍耐度, 有三种取值: 0,poll函数不阻塞 整数,阻塞timeout时间 负数,无限阻塞 下面来看一下struct pollfd结构体,以及其中的事件有哪些取值,及其含义 struct pollfd {   int fd; /* an open file

Nginx+uWSGI+Django部署web服务器

只愿长相守 提交于 2020-02-01 22:10:37
Nginx+uWSGI+Django部署web服务器 原创铁乐与猫 最后发布于2018-08-28 14:33:08 阅读数 4813 收藏 展开 Nginx+uWSGI+Django部署web服务器 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx 应用 uWSGI 和 test.py 用UNIX socket取代TCP port uwsgi部署加强 使用uwsgi配置文件运行django项目 安装uWSGI到真实环境中 uwsgi配置文件更多参数 uWSGI开机启动服务 环境说明 进行本文操作前需己搭建好的环境 linux系统,我用的是openSUSE 使用了operation用户的家目录做为测试环境 python3.5.6 virtualenv 16.0 pip3 18.0 nginx 1.13.1 后面进行安装的环境 django 1

uwsgi 神器问题

自作多情 提交于 2020-02-01 21:25:26
问题简述:编程新手打算用Ubuntu16.04,Python3.5,Django2.0写一个展示数据的简易项目,只有一个App,测试无误,打算用NGINX+uWSGI部署。但是测试过程中出现问题。 先贴下代码 项目写在/var/www/下,名称onco,建立一个app为current。 setting是这样的(除了数据库,App改了之外,就下边加了关于静态文件的东西): import os DEBUG = False ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', ] ... STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, "static/") 在部署uWSGI过程中,用来测试的test.py为: #!/usr/bin/python def application(env, start_response): start_response(

网络异步实现客户端

拜拜、爱过 提交于 2020-02-01 20:55:17
之前学习的客户端当然可以实现基本的功能,只是会出现卡顿的现象,用户的体验并不是很好,我们现在用异步实现这样的功能 具体完整的代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net.Sockets; using UnityEngine.UI; using System; public class Echo : MonoBehaviour { //定义套接字 Socket socket; //定义UGUI public InputField inputField; public Text text; //接收缓冲区 byte[] readBuff = new byte[1024]; string recvStr = " "; // 点击连接按钮 public void Connection() { //Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Connect //socket.Connect("127.0.0.1", 8888); //Connect socket.BeginConnect("127

网络协议UDP

て烟熏妆下的殇ゞ 提交于 2020-02-01 08:47:59
------------------------------互联网协议与协议族------------------------------ tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终端进行沟通,规范协议 。 互联网协议族:为tcp/ip协议族 大概有上百种协议,其中tcp协议、ip协议使用的比较 多所以大家默认成为tcp/ip IP地址:网络地址(ip地址与子网掩码进行与运算获得)和主机地址 A类IP地址:由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0” (地址范围1.0.0.1-126.255.255.254) B类IP地址:由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是 “10”(128.1.0.1-191.255.255.254) C类IP地址:由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须 是“110”(范围192.0.1.1-223.255.255.254) ------------------------------socket介绍------------------------------ #定义:socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主 要不同是: #import socket:应用socket包 #socket.socket(Address

Nginx和php-fpm是怎么通信的

被刻印的时光 ゝ 提交于 2020-02-01 03:33:08
FastCGI原理 FastCGI是一个运用于HttpServer和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。 FastCGI接口方式采用C/S结构,可以将HttP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HttP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给客户端。这种方式可以让HttP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 Nginx+php-fpm实现原理 Nginx本身不会对PHP进行解析,终端对PHP页面的请求将会被Nginx交给FastCGI进程监听的IP地址及端口,由php-fpm作为动态解析服务器处理,最后将处理结果再返回给nginx。其实,Nginx就是一个反向代理服务器。Nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的原理。 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket

Node之使用dgram模块实现基于UDP的数据通信

别说谁变了你拦得住时间么 提交于 2020-02-01 01:06:55
使用dgram模块实现基于UDP的数据通信 TCP是一种基于连接的协议,在进行通信前,首先要求客户端与服务器端建立一条用于通信的连接。而UDP是一种面向非连接的协议,在进行通信前,不要求首先建立客户端与服务器端之间的连接,可以直接把数据包发送给对方。基于这个原因,UPD也是一种不可靠的协议,但是其传输速度比TCP更快,因此更适用于实时通信的场合。 在Node.js中,提供了dgram模块,用于创建UPD服务器与客户端,以及实现UDP服务器与客户端之间的通信。 创建UDP服务器与客户端 在dgram模块中,可以使用createSocket方法创建一个用于实现UDP通信的socket端口对象 var socket=dgram.createSocket(type,[callback]) type:用于指定进行UDP通信时使用的协议类型,可指定值为“upd4”或“upd6”。 callback:用于指定当从该端口接收到数据时调用的回调函数,在该回调函数中,可以使用两个参数。msg参数值为一个Buffer对象,其中存放了接收到的数据。rinfo参数值也为一个对象,该对象所具有的属性及属性值如下: address:属性值为发送者所使用的地址,例如127.0.0.1。 family:属性值为一个标识了发送者所使用的地址是IPv4地址还是IPv6地址的字符串,例如“IPv4”。 port