服务端_服务端渲染 - CSDN
精华内容
参与话题
  • 什么是服务端开发

    千次阅读 2014-10-16 10:07:25
    从事服务端开发已经有一些日子了,静下来可以想想和记录些服务端开发的想法了。 服务端开发,特别是Web开发,基本上全是处理HTTP请求的处理。根据具体用途分为两种:Web页面开发和API接口开发。Web页面开发也完全...

     一直不是很了解服务端开发做些什么具体工作,只是觉得服务的开发的都是大牛那种。今天看到下面的这篇文章才有所了解。

    从事服务端开发已经有一些日子了,静下来可以想想和记录些服务端开发的想法了。

    服务端开发,特别是Web开发,基本上全是处理HTTP请求的处理。根据具体用途分为两种:Web页面开发和API接口开发。Web页面开发也完全可以看成是API接口开发,只是它的两个主要部分,页面和ajax请求,一个是返回html,另外一个可以返回html,也可以返回其他格式的而已。API接口开发是针对有客户端产品而言的。可能是移动设备,可能是PC应用等。

    应用框架

    应用框架一般使用的是LNMP或者LAMP,基本的框架就是前端N台Web服务机 + cgi访问PHP + php访问mysql。

    PHP可以看成是C写的一个大型的Web框架,它的优势在于解释型,即时修改即时更新。所以线上代码更新维护成本极低,加之其为web开发几乎是专门定制的一些函数,所以适合用于web开发。相较于java开发web服务,动不动就需要重新编译的痛苦就很知足了。

    web服务器现在nginx是越来越多使用,nginx比较apache的优势就在于轻便和静态页面的高并发性能。一般拿到设备先需要考虑下单机可承受的qps大概多少,方法大致就是先只考虑内存,计算同时能开启多少个php-cgi,比如一个4G内存的机器,每个php-fpm大概占用20M内存,所以差不多能开启200个php-cgi进程(一般会留些空余的),每个进程同一个时间只能跑一个php程序,所以假设每个php程序跑0.1s,1s就能处理10个请求,所以单机qps大概会是2000。当然,一般不会开启到这么极致的程度,有几个原因:

    1 需要考虑到其他进程使用内存的情况

    2 考虑到如果一旦全部内存都使用完了,是否启用swap,如果没有的话,那机器是否就立即当机

    3 还需要考虑到CPU和带宽的使用情况。CPU对一些比如加解密,视频转码等操作比较耗时,这个时候如果没有使用队列,那么每个请求的时间就会加长。

    文件服务器

    一般会要求文件服务器和web服务器分开,分开的意思就是使用不同的域名进行拆分。当然web服务器也是可以当做文件服务器的,但是由于文件服务器需要上传文件,而上传文件是一个非常耗时的工作,即php的一个程序需要停留的时间很长,所以需要将它们分开。一则可以为以后扩展文件服务器提供便利,二则不会导致文件服务影响了正常的web服务。

    从文件服务器拆分的理由上看,在运营过程中一些比较占用资源或者特别频繁调用的接口是可以或者应该考虑拆分到不同机器上的。

    Web前端机始终要访问持久化的数据的,mysql的使用是最为频繁的。其实所有的web服务说到底都是对数据库进行增删改查的操作。说到性能,数据库的增删改查操作的性能其实就决定了一切。所以对数据库的建表,索引的使用对一个网站来说尤为重要。觉得最有用的几个mysql的技巧有:

    1 覆盖索引。就是想办法让查询操作只查索引而不去查表的索引建立方法。建立合适的索引和能只在索引就能找到数据的查询能提高效率。

    2 InnoDB表最好能使用自增键,提高插入操作的效率。

    3 string类型的变量的存储格式,是使用varchar还是char比较好,曾经有个项目表设计从char到varchar之后的数据库大小差别达到70G和20G的大小…

    4 建表的时候需要考虑下以后的分库分表,如果是使用分表,什么是分表键?是否需要反向查询表?

    5 甚至当考虑到数据库和Web机器的机房分布,这个设计就更麻烦了…

    mysql的建表环节和需求有很大关系。没有明确的需求,表设计一定是不正确的。

    数据库支持有可能还是不足够的,那么首先想到的可能就是缓存了。缓存是使用全局缓存?放在web前端机?需要用什么hash算法?用什么缓存?memcache?redis?mysql也有自带缓存,如何查询才能更好命中这个缓存?当数据更新的时候,缓存中的数据是否是脏数据?如何更新数据?

    Web页面开发

    当需要做一个网站的时候,首先要考虑的是用户量有多少?做一个SNS网站和做一个运营后台网站完全是两个不同的概念。

    首先是在页面压力上,SNS网站的qps可能几千上万,而运营后台压力几乎完全可以不用计算。这个就意味着后端的数据库支持不同了。SNS网站可能最常调用的会是好友关系和个人信息的接口,这样的接口是不是需要独立出来处理?这样的请求会很多是重复的,是不是考虑使用中间件或者缓存来减轻对数据库的直接压力呢?运营数据一般使用单表就可以解决的。个人觉得运营中统计的需求是最难做的。首先统计并不是任意的统计要求都可以满足,这个需要和产品讨论需求。其次,统计一般需要使用些访问日志之类的,可能涉及到许多shell脚本。

    API开发

    其实相对于Web开发,API开发是属于被动的。意思就是,由于客户端可能是手机产品,可能是PC产品。往往都是有发布和版本的。这个意味着API接口没法像Web那样为所欲为随时更新代码。它更多需要考虑到各个版本之间的兼容问题。兼容问题在很大程度上会变为加法,永远不会是减法。个人感觉,如果毫无节制地满足需求,随着版本越来越多,你的代码中会越来越多if else,到最后,你的代码就根本无法维护了。然后就会是别人来接手你的工作,踩坑,边骂边重构….API开发是最需要依赖测试的。往往只有测试人员才对各个版本的小改动,小特性如数家珍。

    再考虑到非功能配套:

    你可能需要对API调用时间进行统计,这样你才明白你的接口表现如何。

    你的代码可能还会用到其他机器上的服务,比如curl一个其他服务,这样的情况,最好考虑下错误处理和日志记录。

    对于有金钱交易的接口服务,日志处理更是必不可少。

    对于一些内部错误,最好不需要直接抛出显示给用户,所以需要使用的最好是白名单错误机制。

    接口的加密方式,一般最少是需要有个签名机制的,考虑到加密方法,大致有几种:对称加密和非对称加密。加密的时候就需要考虑到一些情况了,比如手机客户端的用电量等。

    如果是给手机开发接口,需要考虑流量问题,图片的规格问题。

    框架永远是会变的,不说需求的变化,单就用户量的变化,20w用户和1000w用户的框架一定是不一样的。刚开始的时候你不可能根据1000w的用户量来设计框架来给20w人用。所以一个好的服务端框架一定是随着用户量变化会进行几次大的变化的。

    后记

    这篇是想到哪写到哪,写到这里发现写不下去了…总之,web服务开发的技巧和小东西还是很多的。有的坑是需要自己踩过才知道痛的。可爱的是,我还在继续踩坑中…

    补充下,接口重构几乎是每个服务端开发人员必须经历过的。相较于开发一个新系统,接口重构的难度可以说是翻翻,当然这里的难度也可以理解为难受程度…也会是很锻炼人的一个活。对于重构来说,测试尤为重要,如何有个很好的测试集来保证你的重构的正确性是个难度。

    展开全文
  • 客户端与服务端的区别

    千次阅读 2018-11-01 11:26:09
    服务端:顾名思义是服务的,客户端发送的请求交给服务器端处理,是以response对象存在,服务器端处理完毕后反馈给客户端。 一般我们访问网站,都是客户端(浏览器、app)发出请求,然后对方服务器端(sina,sohu)响应,结果...

    客户端:在web中是以request对象存在的,发送请求给服务器端处理.

    服务端:顾名思义是服务的,客户端发送的请求交给服务器端处理,是以response对象存在,服务器端处理完毕后反馈给客户端。
    一般我们访问网站,都是客户端(浏览器、app)发出请求,然后对方服务器端(sina,sohu)响应,结果就是返回了页面路径给我们,我们再根据路径看到了网页。

    又叫主从式架构,简称C/S结构,是一种网络架构,它把客户端 (Client) (通常是一个采用图形用户界面的程序)与服务器 (Server) 区分开来。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。有很多不同类型的服务器,例如文件服务器、终端服务器和邮件服务器等。虽然它们的存在的目的不一样,但基本构架是一样的。
    展开全文
  • 准备好武魂服务端!这个就是服务端了! 下面来看一下架设: 1.用查询分析器执行 EXEC sp_addlinkedserver @server='BILLING', @srvproduct='', @provider='SQLOLEDB', @datasrc='bpwl' 注意! 这里我说一下 我的机器...
  • 关于服务器端和客户端的区别

    千次阅读 2018-07-18 17:34:41
    服务端服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据。是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术,比如你要修改某个NPC的参数,重加载后,在游戏内立刻体现...

    首先

    百度百科解释:

    服务端:服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据。是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术,比如你要修改某个NPC的参数,重加载后,在游戏内立刻体现出来。

    客户端:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行。

    其次

    自己理解:

    客户端:在web中是以request对象存在的,发送请求给服务器端处理,具体的使用方法可以查找javaee的servletrequest以及其子类。
    服务端:顾名思义是服务的,客户端发送的请求交给服务器端处理,是以response对象存在,服务器端处理完毕后反馈给客户端。
    一般我们访问网站,都是客户端(浏览器、app)发出请求,然后对方服务器端(sina,sohu)响应,结果就是返回了页面路径给我们,我们再根据路径看到了网页。

    对应网站来说

    你的网站存放的位置就是服务端,访客看到的就是客户端(比如浏览器)。

    展开全文
  • xxx服务端.zip

    2020-04-16 23:33:39
    VS2019,服务端程序。定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)。
  • 命运WYD服务端

    2020-07-30 23:31:51
    版本己测试,IP也己改好的端,没有什么问题,建议单机使用,如需开区,概不负责
  • 服务器端介绍

    2020-09-19 19:00:41
    基本概念 URL 1.统一资源定位符,URL(Uniform Resource Locator),是为internet...开发阶段,服务端和客户端使用同一台电脑。 本机域名:localhost 本机IP:127.0.0.1 创建web服务器 1. //用于创建网站的模块 const

    基本概念

    网站的组成

    1.网站应用程序主要分为两大部分:客户端和服务器端。

    2.客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、CSS、JavaScript构建。

    3.服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑。
    在这里插入图片描述

    Node网站服务器

    1.能够提供网站访问服务的机器就是网站服务器,它能够接收客户端的请求,能够对请求做出响应。
    在这里插入图片描述

    ip地址

    1.互联网中设备的唯一标识。
    IP是Internet Protocol Address的简写,代表互联网协议地址。
    在这里插入图片描述

    端口

    1.端口是计算机与外界通讯交流的出口,用来区分服务器电脑中提供的不同的服务。
    在这里插入图片描述

    URL

    1.统一资源定位符,URL(Uniform Resource Locator),是为internet网上资源位置而设的一种编址模式。网页地址。

    2.组成:传输协议://服务器IP或域名:端口/资源所在位置标识。

    http:超文本传输协议,提供了一种发布和接收HTML的方法
    参考此文章最后URL介绍

    开发过程中客户端和服务端说明

    开发阶段,服务端和客户端使用同一台电脑。
    本机域名:localhost
    本机IP:127.0.0.1

    创建web服务器

    在这里插入图片描述
    1.

    //用于创建网站的模块
    const http = require('http');
    //app对象就是网站服务器对象
    const app = http.createServer();
    //当客户端有请求来的时候
    app.on('request',(require,response) => {
    	res.end('<h2>hello user</h2>');
    
    });
    
    app.listen(3000);
    
    console.log('网站服务器启动成功');
    

    2.在终端输入nodemon app.js

    3.网页地址栏localhost:3000

    HTTP协议

    1.超文本传输协议(Hype Text Transfer Protocol)规定了如何从网站服务器传输超文本到本地服务器,它是基于客户端服务器架构工作,是客户端和服务器端请求和应答的标准。
    在这里插入图片描述

    报文

    在HTTP请求和响应过程中传递的数据块就是报文,包括要传送的数据和一些附加信息,并且遵守规定好的格式。
    在这里插入图片描述

    请求报文

    1.请求方式(Request Method)
    GET 请求数据
    POST 发送数据

    2.请求地址
    req.headers 获取请求报文
    req.url 获取请求地址
    req.method 获取请求方法
    在这里插入图片描述

    响应报文

    1.HTTP状态码
    200 请求成功
    400 请求资源没有被找到
    500 服务器端错误
    400 客户端请求有语法错误

    2.内容类型
    text/html
    text/css
    application/javascript
    image/jpg
    application/json
    在这里插入图片描述

    //用于创建网站的模块
    const http = require('http');
    //app对象就是网站服务器对象
    const app = http.createServer();
    
    //当客户端有请求来的时候
    app.on('request',(req,res) => {
    	
    	res.writeHead(200,{
    	'content-type': 'text/html'
    });
    	res.end('<h2>hello user</h2>');
    
    });
    
    app.listen(3000);
    
    console.log('网站服务器启动成功');
    

    content-type 文本类型
    charset 编码类型

    HTTP的请求与处理

    请求参数

    客户端向服务端发送请求时,有时会携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器,比如登录操作
    在这里插入图片描述

    GET请求参数

    参数被放置在浏览器地址栏中
    在这里插入图片描述
    req.url获取
    url.parse处理

    const url = require('url');
     console.log(url.parse(req.url));
    

    在这里插入图片描述
    加上true以后

    console.log(req.url);
        //参数1是要解析的url
        //参数2是解析成对象形式
        console.log(url.parse(req.url,true));
    

    在这里插入图片描述
    获取到数据

    let params = url.parse(req.url,true).query;
    
        console.log(params.name);
        console.log(params.age);
    

    在这里插入图片描述

    POST请求参数

    1.参数被放置在请求体中进行传输
    2.获取POST参数需要使用data事件和end事件
    3.使用querystring系统模块将参数转换成对象格式
    在这里插入图片描述
    实例演示:
    创建post.js文件,用来开启服务器等待客户端请求

    // 用于创建网站服务器的模块
    const http = require('http');
    // app对象就是网站服务器对象
    const app = http.createServer();
    // 处理请求参数模块
    const querystring = require('querystring');
    // 当客户端有请求来的时候
    app.on('request', (req, res) => {
    	// post参数是通过事件的方式接受的
    	// data 当请求参数传递的时候触发data事件
    	// end 当参数传递完成的时候触发end事件
    	
    	let postParams = '';
    
    	req.on('data', params => {
    		postParams += params;
    	});
    
    	req.on('end', () => {
    		console.log(postParams);
    	});
    
    	res.end('ok');
    
    });
    // 监听端口
    app.listen(3000);
    console.log('网站服务器启动成功');
    

    let postParams = ''; 设置变量名称接受传递的数据

    此时在命令行输入 nodemon post.js打开服务端

    然后运行form.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    </head>
    <body>
    	<!--
    		method: 指定当前表单提交的方式
    		action: 指定当前表单提交的地址
    	-->
    	<form method="post" action="http://localhost:3000">
    
    		<input type="text" name="username">
    
    		<input type="password" name="password">
    		
    		<input type="submit">
    	</form>
    </body>
    </html>
    

    输入数据后命令行中打印出
    在这里插入图片描述
    代表post请求参数成功

    querystring处理post请求中返回的对象

    const querystring = require('querystring');
    
    req.on('end', () => {
    		console.log(querystring.parse(postParams));
    	});
    

    返回结果如下:
    在这里插入图片描述

    路由

    1.路由是指客户端请求地址与服务器端程序代码的对应关系。
    简单的说,就是请求什么响应什么。
    在这里插入图片描述
    核心代码:
    在这里插入图片描述
    代码举例:

    // 1.引入系统模块http
    // 2.创建网站服务器
    // 3.为网站服务器对象添加请求事件
    // 4.实现路由功能
    // 	1.获取客户端的请求方式
    // 	2.获取客户端的请求地址
    const http = require('http');
    const url = require('url');
    
    const app = http.createServer();
    
    app.on('request', (req, res) => {
    	// 获取请求方式
    	const method = req.method.toLowerCase();
    	// 获取请求地址
    	const pathname = url.parse(req.url).pathname;
    
    	res.writeHead(200, {
    		'content-type': 'text/html;charset=utf8'
    	});
    
    	if (method == 'get') {
    
    		if (pathname == '/' || pathname == '/index') {
    			res.end('欢迎来到首页')
    		}else if (pathname == '/list') {
    			res.end('欢迎来到列表页')
    		}else {
    			res.end('您访问的页面不存在')
    		}
    
    	}else if (method == 'post') {
    
    	}
    
    });
    
    app.listen(3000);
    console.log('服务器启动成功')
    

    静态资源

    1.服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。
    代码示例:

    const http = require('http');
    const url = require('url');
    const path = require('path');
    const fs = require('fs');
    const mime = require('mime');
    
    const app = http.createServer();
    
    app.on('request', (req, res) => {
    	// 获取用户的请求路径
    	let pathname = url.parse(req.url).pathname;
    
    	pathname = pathname == '/' ? '/default.html' : pathname;
    
    	// 将用户的请求路径转换为实际的服务器硬盘路径
    	let realPath = path.join(__dirname, 'public' + pathname);
    
    	let type = mime.getType(realPath)
    
    	// 读取文件
    	fs.readFile(realPath, (error, result) => {
    		// 如果文件读取失败
    		if (error != null) {
    			res.writeHead(404, {
    				'content-type': 'text/html;charset=utf8'
    			})
    			res.end('文件读取失败');
    			return;
    		}
    
    		res.writeHead(200, {
    			'content-type': type
    		})
    
    		res.end(result);
    	});
    });
    
    app.listen(3000);
    console.log('服务器启动成功')
    

    代码解释
    1.let pathname = url.parse(req.url).pathname; 获取用户请求的路径

    2.let realPath = path.join(__dirname, 'public' + pathname); 通过path模块中方法找到硬盘路径(找到资源文件)

    3.let type = mime.getType(realPath) 使用mime模块来自动判断返回文档类型

    4.pathname = pathname == '/' ? '/default.html' : pathname; 让本地localhost也能访问到资源

    注:default.html是我本身电脑的文件,例子举例而已。

    动态资源

    2.相同的请求地址不同的响应资源,这种资源就是动态资源。

    展开全文
  • HTTP协议理解及服务端与客户端的设计实现

    万次阅读 多人点赞 2019-07-11 09:29:48
    本文主要帮助读者理解 HTTP 的协作原理、HTTP 相关的各层协议,在服务端和客户端的架构设计和一些优化的技巧,本文中主要讲述逻辑思想和协议远离,会使用部分 Java 代码,但会有详细的讲解,非开发应该也读的明白。...
  • 客户端和服务端的关系

    千次阅读 多人点赞 2018-01-09 19:47:10
    客户端和服务端的关系  很多人在学习编程的时候并不知道客户端和服务端的关系,今天就让我给你用一个打比方的方法为你解说一下客户端和服务端之间的秘密。  我在大学喜欢去清蒸餐厅吃饭,因为比较近,那我...
  • .NET开发WebSocket服务端

    2019-09-29 15:45:52
    服务端: 1、新建一个ASP.NET Core Web应用程序。 2、NuGet安装Microsoft.AspNetCore.WebSockets包。 3、在Startup类的Configue函数里输入以下代码: app.UseWebSockets(); app.Use(async (context, next) =>...
  • 服务端的简单配置

    2020-08-28 10:21:11
    “忽悠”一下服务端的配置。怎么说勒。我们开发一个系统,是分为客户端和服务端的。客户端是给客户看的,服务端是给自己家的工作人员用的。客户端和服务端有啥区别呢,就好比一道菜,你知道这是啥菜,但是你不知道这...
  • 服务器端和客户端有什么区别

    万次阅读 2018-04-01 09:26:20
    服务端:顾名思义是服务的,客户端发送的请求交给服务器端处理,是以response对象存在,服务器端处理完毕后反馈给客户端。 一般我们访问网站,都是客户端(浏览器、app)发出请求,然后对方服务器端(sina,sohu)响应,结果...
  • 性能测试 - 游戏服务端框架

    万次阅读 2019-03-19 15:17:15
    服务端框架用于处理持续并发或瞬时并发的请求,同时有良好扩展性和稳定性,简单概括三点:并发性、稳定性、扩展性。 今天开始利用业余时间将自己经历过的多款上线游戏产品经验总结分享给童鞋们。从最基础的讲起,...
  • Dubbo服务端/客户端demo

    万次阅读 热门讨论 2018-03-09 17:41:48
    项目组采用分布式服务,线上有几十个应用,RPC调用完全... 一 服务端 服务端maven父工程 首先搭建一个maven父工程,引入dubbo和spring的依赖,dubbo可以和spring无缝集成。&lt;properties&gt; &lt...
  • 本节我们将围绕“是什么”(服务端渲染的运行机制)、“为什么”(服务端渲染解决了什么性能问题 )、“怎么做”(服务端渲染的应用实例与使用场景)这三个点,对服务端渲染进行探索。 服务端渲染是一个相对的概念,...
  • QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载QQ客户端和服务端下载...
  • 继上一篇《PVE 天龙八部TLBB服务端搭建(一)--linux环境搭建》环境搭建好之后,开始服务端的运行。 服务端运行环境分为linux和windows,我这里从某宝花1块2买了一个一键端。 1、导出linux tlbb服务端 某宝上面的...
  • 启用Win10家庭版的远程桌面服务端

    万次阅读 多人点赞 2018-02-12 09:39:16
    Windows 10 家庭版中取消了远程桌面服务端,想通过远程连接到自己的电脑就很麻烦了,第三方远程桌面速度又不理想(如TeamViewer)。通过以下方法可让系统恢复远程桌面功能。国内多数品牌机都是预装的win10中文版 傻瓜...
  • Netty即是服务端又是客户端,服务端和客户端相互对应。 具体功能细节是: 上游有一个服务,会主动发送消息给我中间件平台。中间件平台既有服务端也有客户端。通过下游客户端连接进来的客户端和中间件传下去的通道...
  • 互联网服务端测试是个啥(入门科普)

    万次阅读 多人点赞 2018-08-22 15:00:48
    互联网服务端测试是个啥(入门科普) 微博:论路痴的自我修养 啥是服务端?  一般所说的服务端是指为用户在APP或PC使用的互联网功能提供数据服务的背后的一切(你没看错,是一切)。  移动互联网时代,...
1 2 3 4 5 ... 20
收藏数 824,384
精华内容 329,753
关键字:

服务端