在直播中,创建房间,获取房间,都需要服务器,因此需要搭建web服务器
web服务器
能处理http请求的服务器都可以叫web服务器node.js介绍
node.js什么时候出现,2009年,ryan dahl(瑞恩·达尔)在github上发布了最初版本的部分node.js包,随后几个月里,有人开始使用node.js开发应用什么是node.js,做过javascript开发的,看到node.js这个名字,初学者可能会误以为这是一个javascript应用,事实上,node.js采用c++语言编写而成,是一个javascript的运行环境,意思就是底层使用c++编写,外层封装采用javascript,需要使用javascript解析执行。比如oc底层也是c++,但是执行代码,只需要解析oc代码。node.js是一个后端的javascript运行环境,这意味着你可以编写服务器端的javascript代码,交给node.js来解释执行。node.js工作原理与优缺点(了解一门语言的开始)
传统web服务器原理(t)
:传统的网络服务技术,是每个新增一个连接(请求)便生成一个新的线程,这个新的线程会占用系统内存,最终会占掉所有的可用内存。node.js工作原理(t)
:只运行在一个单线程中,使用非阻塞的异步 i/o 调用,所有连接都由该线程处理,也就是一个新的连接,不会开启新的线程,仅仅一个线程去处理多个请求。优缺点
:传统的比较消耗内存,node.js只开启一个线程,大大减少内存消耗。假设是普通的web程序,新接入一个连接会占用 2m 的内存,在有 8gb ram的系统上运行时, 算上线程之间上下文切换的成本,并发连接的最大理论值则为 4000 个。这是在传统 web服务端技术下的处理情况。而 node.js 则达到了约 1m 一个并发连接的拓展级别node.js弊端:大量的计算可能会使得 node 的单线程暂时失去反应, 并导致所有的其他客户端的请求一直阻塞, 直到计算结束才恢复正常疑问?node.js是单线程的。单线程怎么开启异步?怎么工作的? 需要了解事件驱动。什么是事件驱动?(t)传统的web rver多为基于线程模型。你启动apache或者什么rver,它开始等待接受连接。当收到一个连接,rver保持连接连通直到页面或者什么事务请求完成。如果他需要花几微妙时间去读取磁盘或者访问数据库,web rver就阻塞了io操作(这也被称之为阻塞式io).想提高这样的web rver的性能就只有启动更多的rver实例。node.js使用事件驱动模型,当web rver接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被绿叶对根的情谊返回给用户。这个模型非常高效可扩展性非常强,因为webrver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式io或者事件驱动io)本质:当然最终处理事件还是需要底层开启线程,只不过接受请求只用一个线程去接收。node.js使用介绍
node.js使用module模块去划分不同的功能,以简化app开发,module就是库,跟组件化差不多,一个功能一个库。nodejs内建了一个http服务器,可以轻而易举的实现一个网站和服务器的组合,不像php那样,在使用php的时候,必须先搭建一个apache之类的http服务器,然后通过http服务器的模块加载cgi调用,才能将php脚本的执行结果呈现给用户require() 函数,用于在当前模块中加载和使用其他模块;express模块(框架)
express是node.js第三方库express可以处理各种http请求express是目前最流行的基于node.js的web开发框架,express框架建立在node.js内置的http模块上,可以快速地搭建一个web服务器express官方文档javascript文档.aspx)请点击此处输入图片描
搭建web服务器步骤
一、安装node.js
打开终端,输入node -v,先查看是否已经安装如果没有安装,就需要安装node软件。mac上可以使用homebrew,安装nodehomebrew:homebrew简称brew,是mac osx上的软件包管理工具,能在mac中方便的安装软件或者卸载软件,相当于window上360管家,可以帮你下载软件。先输入brew -v,查看mac是否安装了homebrew安装ruby教程(http://www.jianshu.com/p/daa92187621c)使用ruby安装homebrew,前提是安装了ruby输入指令安装brew使用homebrew安装node,输入指令
安装完,输入`node -v“查看是否安装成功二、安装npmnpm是随同nodejs一起安装的包管理工具,用于下载nodejs第三方库。类似ios开发中cocoapods,用于安装第三方框架新版的nodejs已经集成了npm,所以只要安装好node.js就好
三、利用npm下载第三方模块(express和socket.io)
package.jsonpackage.json类似cocoapods中的podfile文件package.json文件描述了下载哪些第三方框架.可以使用npm init创建需要添加dependencies字段,描述添加哪些框架,其他字段随便填注意:不能有中文符号四、执行npm install,就会自动下载依赖库
五、创建node.js文件,搭建服务器
只要文件,以js为后缀就可以了,比如app.js使用node app.js 就能执行文件注意点:监听端口要注意,不能使用已经占用的端口比如(80),每个服务器相当于一个app,都需要端口,才能找到入口六、简单的搭建http服务器
七、express框架
直接创建express应用,就是服务器,可以直接监听需要主动监听请求,get,post八、路由
路由:如何响应客户端的请求添加url路径,根据不同路径,显示不同内容访问地址,/home应该往端口后拼接,8080/home路由句柄(索引):执行完一个函数,接着执行下一个 ,因为有时候处理一个请求,需要做很多其他事情,写在一起业务逻辑不好分开,所以多弄几个行数
九、中间件
优化代码,使代码清晰可读注意点,函数一定要添加next参数,一定要调用next(),才会进行下面操作,代码使一行一行执行,解释性语言原理,发送一个请求给服务器的时候,会被中间件拦截,先由中间件处理,每个中间件都有一个回调函数作为参数u是express注册中间件的方法代码演示十、get请求参数
request.query会把请求参数包装成字典对象,直接通过点就能获取参数十一、post请求参数
使用http发送请求,需要设置content-type字段content-type字段2.1 application/x-www-form-urlencoded(普通请求,默认一般使用这种)2.2 application/json(带有json格式的参数,需要使用这个,比如参数是字典或者数组)2.3 multipart/form-data(传输文件,文件上传使用这个)afn框架中afhttprequestrializer使用的是application/x-www-form-urlencoded,afjsonrequestrializer使用的是application/jsonnode.js需要使用body-parr模块,解析post请求参数,安装body-parr模块,用命令行可以采用中间件的方式解析post请求参数
5.1 注意bodyparr.urlencoded参数是一个字典,需要添加`{}“包装,bodyparr.urlencoded({extends:true})
5.2 extends必传参数,是否展情商测试题开
完整代码十二、express创建对象返回客户端
{}:字典 []:数组自定义对象,才有functionfunction可以定义函数,也可以定义对象,一般有属性的,都是对象定义对象,this:表示当前对象,类似lf对象可以直接输出十三、express模块开发
如果把所有代码写在一个文件中,不好维护,代码可读性不好,最好分离文件使用模块开发,exports用来定义模块接口,可以定义函数,也可以定义自定义对象,需要用module.exports注意,module.exports和exports不能重复,重复以module.exports为准路径问题: ./ : 表示当前文件main.jsur.js十四、字典和数组删除操作
删除数组splice,splice有2两个参数,第一个参数,从哪个角标开始 第二个参数,删除几个元素删除字典delete注意:delete删除数组,删除不干净,只是把元素删除,当前角标位置并不会移除[1,2,3] 比如delete arr[青浦高级中学一本率0] => [,2,3]十四、直播房间服务器搭建
创建package.json,安装express模块设计服务器接口和客户端怎么交互直播房间业务逻辑3高一数学函数练习题.1 主播主动开启房间3.2 通知服务器开启房间了3.3 服务器保存房间3.4 观众打开房间,查看直播3.5 主播关闭直播,通知服务器移除房间号服务器处理4.1 主播开启房间,创建房间,需要传入给服务器保存4.2 服务器用什么保存房间名称,数组还是字典4.3 应该使用字典存储,当主播关闭房间时,可以根据房间号,找到服门徒剧情务器对应的房间号删除。4.4 添加房间,删除房间之后,服务器应该把最新的房间信息返回给客户端展示4.5 服务器可以直接返回房间字典,但是这样客户端必须自己处理下,服务器最好返回房间数组4.6 object.keys(rooms),传入一个字典,就能获取字典中所有keys,返回一个数组4.7 然后遍历keys数组,一个一个取出对应的value,在保存到数组中4.8 可以使用map函数,让数组中所有元素执行一个方法,然后会自动把处理结果包装成数组.4.9 map函数原理,就是遍历数组中元素,一个一个执行,map函数的参数就是一个函数,,这个函数的参数就是数组中的一个元素key,map需要有返回值,返回值就是key参数的处理结果,会自动把处理结果包装到新数组,然后再统一返回处理好的数组客户端处理5.1 房间模型(id,房间名称)5.2 保存到服务器字典,id作为key,房间名称作为value5.3 在发送服务器的时候,需要把id和value传给服务器5.4 搞两个参数(一个roomid,一个roomname)服务器代码
本文发布于:2023-04-05 19:16:03,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/0315b907289686aa017675272bf5cb4f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:服务器是干什么的,服务器的分类及作用.doc
本文 PDF 下载地址:服务器是干什么的,服务器的分类及作用.pdf
留言与评论(共有 0 条评论) |