Node.js Up and Runing 学习日记(八)

目录

  • 连接池
    • 基于
    • 一个简单的Socker.io服务器

连接池

生产环境通常由多种资源组成: web服务器,缓存服务器和数据库服务器.
数据库服务器通常部署在web服务器之外的独立机器上,这使得面向公众的网站不必重新配置和修改复杂的数据库群就可以垂直增长了.

基于

  • 为每一个请求创建一个甚至多个连接会对高流量的网站造成不必要的额额外负担,也会导致性能下降

    解决方案

  • 在内部缓存池里维护数据库连接,当某一个连接不再需要时,她会被放回连接池里,这样就能立刻为下一个进入的请求服务

    通用的连接池- generic-pool

    连接池模式违反了Node的"一个模块,一个功能"的理念
    该模块尽可能的防止因为创建新的数据库连接为而带来的 开销

    消息队列协议

    发布-订阅模型

    用户注册流程中,数据库调用可以等到用户受到欢迎之后在进行操作,统计数据可以从程序的主逻辑独立出去处理,这样的情况下,你可以选择生成一条消息,来通知程序的其他部分有新用户注册了,这样的程序也可能完全运行在另外一个服务器上

    请求-回复模型

    请求信息,回馈

  • 消息队列允许程序员发布时间然后继续其他操作,通过进程间通信频道,提高了并发处理的频率,并实现了更高的扩展性

    RabbitMQ

    消息代理,支持高级消息队列(AMQP)

    外部模块

    Socket.IO

    小巧的扩展库.通过Socket.IO在浏览器客户端与Node服务器之间采用高效的底层socket机制来回发送消息
    浏览器和服务器之间共享代码

        var http = require('http'), io = require('socket.io')var server = http.createServer()server.on('request', function(req, res){res.writeHead(200,{'Content-Type':'text/plain'})res.end('hello world')})server.listen(80)var socket = io.listen(server)socket.on('connection', function(client){console.log('client conencted')})
  • 依赖http模块
  • 其实Socket.io不关心Http服务器做什么,她只是把自带的事件监听器包装在发送到服务器的所有请求上
  • Socket.io是持久性连接,不需要像http服务器处理req,res对象,与使用net类似,需要使用传入的client对象来与每一个浏览器进行通信
  • 新建一个网页文件,写入JS代码
           var socket = io.connect('http:/localhost:8080');socket.on('message', function(data){console.log(data);})   

一个简单的Socker.io服务器

        var http = require('http'),io  = require('socket.io'),fs = require('fs')var sockFile = fs.readFileSync('./socket_io.html')server = http.createServer()server.on('request', function(req, res){res.writeHead(200,{'Content-Type':'text/plain'})res.end(sockFile)})server.listen(8080)var socket = io.listen(server)socket.on('connection', function(client){console.log('client conencted')client.send('welcone client' + client.seesionId)})
  • node服务器会返回一份html文件
  • 同步读取会堵塞Node的事件循环,知道文件读取完毕

    命名空间

  • socket.of()函数把socket对象切分成多个独立的命名空间

转载于:https://www.cnblogs.com/zhongyan-enter/p/7349025.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

036有效的数独

1 #include "000库函数.h"2 3 //一看&#xff0c;没想出什么好法子&#xff0c;就遍历了4 //最重要的是如何比较小九宫格的数据5 //44ms6 class Solution {7 public:8 bool isValidSudoku(vector<vector<char>>& board) {9 for (int i …

WinAPI——Windows 消息

消息值 注释 WM_NULL$0000 WM_CREATE$0001 WM_DESTROY$0002 WM_MOVE$0003 WM_SIZE$0005 WM_ACTIVATE$0006 WM_SETFOCUS$0007 WM_KILLFOCUS$0008 WM_ENABLE$000A WM_SETREDRAW$000B WM_SETTEXT$000C WM_GETTEXT$000D WM_GETTEXTLENGTH$000E WM_PAINT$000F WM_CLOSE$0010 WM_QUER…

AciveMQ小结|最后有视频

1 JMS 在介绍ActiveMQ之前&#xff0c;首先简要介绍一下JMS规范。 1.1 JMS的基本构件 1&#xff0e;1&#xff0e;1 连接工厂 连接工厂是客户用来创建连接的对象&#xff0c;例如ActiveMQ提供的ActiveMQConnectionFactory。 1&#xff0e;1&#xff0e;2 连接 JMS Connection封…

Build 2016: 发布明天的云创新来服务今天的开发者

每个企业和行业都在被云潜移默化地改变着。随着云计算的速度、规模和灵活性的不断增加&#xff0c;云服务带来的可能性也在不断被拓展。想象一下&#xff0c;通过监测传感器&#xff0c;一位奶农能够将他的奶牛牛奶产量提高&#xff1b;或是一家医院能够自动监测环境卫生状况&a…

禁用JavaScript之后,你的网站表现如何?

禁用JavaScript之后&#xff0c;你的网站表现如何&#xff1f;一最近要做一个新官网&#xff0c;需求评审完之后&#xff0c;考虑到官网都是纯静态页面&#xff0c;功能简单&#xff0c;操起vue-cli3几秒内创建好了项目脚手架&#xff0c;开发前&#xff0c;我打开了首页模板文…

C# 使用 Windows API 操作控件: SendMessage

在C#中&#xff0c;程序采用了的驱动采用了事件驱动而不是原来的消息驱动&#xff0c;虽然.net框架提供的事件已经十分丰富&#xff0c;但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法&#xff0c;因此在C#中使用消息有时候还是大大提高编程的效率的。定…

对类的理解:

在public class First 表示如果一个类的声明为public&#xff0c;要求该类的类名必须和文件保持一致。在编译 源文件时&#xff0c;让雨果源文件中定义了多个类&#xff0c;那么每个类会形成*.class 文件&#xff0c;执行是&#xff0c;通过Java类名&#xff0c;运行的的是该类…

概率论

概率论转载于:https://www.cnblogs.com/zengkefu/p/7357249.html

Hive安装中遇到过的坑

实现说明每一个用户的环境都有细微的不一致&#xff0c;所以这里只是个人经过这些坑的处理&#xff0c;但是不意味着所有处理都是这样的操作&#xff0c;仅作为参考。 第一个坑 数据库安装&#xff0c;数据库最好装在Linux上&#xff0c;一直出了很多错&#xff0c;这里有一个博…

Halcon:模版匹配

一&#xff1a;函数介绍 1.创建模板 create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID) Template &#xff1a;模板图像 NumLevels&#xff1a;图像金字塔级数&#xff0c;该值越小…

java基础英语---第二十六天

Terminate [ tə:mineit ] 结束 Instantiation [in,stnʃieiʃən] 实例化 Instance declared [diklεəd] 公然的 Access [ əkses ] 进入,接近,入口,通道 Accessible [əksesəbl] 可进入的 invoke [invəuk] 调用 board [bɔ:d] 木板,甲板 MainBoard card [kɑ:d] …

ASP.NET Core部署到Linux服务器(CentOS7 x64)

前言 本文主要讲解如何一步步将ASP.NET Core网站发布到Linux服务器&#xff0c;文中会讲解具体步骤及需要避免的各种问题。 目录 一、环境介绍 二、创建及发布ASP.NET Core网站项目 三、服务器软件安装&#xff08;.NET Core SDK&#xff09; 四、在服务器上部署ASP.NET Core网…

redux进一步优化

1. 将原来的 mapStateToDispatch 中的函数提取出来&#xff0c;放在组件中&#xff0c; 如原来的&#xff1a; function mapStateToProps(state, ownProps) {return {hasMore:state.getIn([tabs,hasMore]),} } function mapDispatchToProps(dispatch) {return {addTabList:(i…

C# : 调用C++动态库(dll)

在实际软件开发过程中&#xff0c;由于公司使用了多种语言开发&#xff0c;在C#中可能需要实现某个功能&#xff0c;而该功能可能用其他语言已经实现了&#xff0c;那么我们可以调用其他语言写好的模块吗&#xff1f;还有就是&#xff0c;由于C#开发好的项目&#xff0c;我们可…

Python3.5以上版本lxml导入etree报错Unresolved reference

Web抓取Web站点使用HTML描述&#xff0c;这意味着每个web页面是一个结构化的文档。有时从中 获取数据同时保持它的结构是有用的。web站点不总是以容易处理的格式&#xff0c; 如 csv 或者 json 提供它们的数据。 这正是web抓取出场的时机。Web抓取是使用计算机程序将web页面数据…

linux设置history历史记录

#说明export HISTSIZE1000 #设置历史记录显示1000行export HISTTIMEFORMAT%F %T #设置历史记录格式 999 2017-08-15 10:58:32 #修改vim /etc/profilesed -i "s/\(HISTSIZE\).*/\11000/" /etc/profilesed -i "/HISTSIZE/aexport HISTTIMEFORMAT%F %T " /et…

STL-容器库101--array【C11】

1. 原型 C11提供 template < class T, size_t N > class array;T&#xff1a; 元素类型&#xff0c;以 array::value_type 作为别名使用&#xff1b;N&#xff1a; array中元素大小&#xff1b; 固定size的序列容器&#xff1b;初始化时&#xff0c; array对象不保存任何…

C#:向C++封送结构体数组

在使用第三方的非托管API时&#xff0c;我们经常会遇到参数为指针或指针的指针这种情况&#xff0c; 一般我们会用IntPtr指向我们需要传递的参数地址&#xff1b; 但是当遇到这种一个导出函数时,我们如何正确的使用IntPtr呢&#xff0c; extern "C" __declspec(dll…

其它综合-CentOS7 忘记root密码

CentOS7 忘记root密码 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码&#xff0c;总不能就重装一台吧&#xff0c;还有好多服务在机器上&#xff0c;于是决定重置root的密码。   如果是已经开启的机器&#xff0c;需要进行关闭&#xff0c;重新启动。在启动选择内核…

left join on and 与 left join on where的区别

数据库在通过连接两张或多张表来返回记录时&#xff0c;都会生成一张中间的临时表&#xff0c;然后再将这张临时表返回给用户。 在使用left jion时&#xff0c;on和where条件的区别如下&#xff1a; 1、 on条件是在生成临时表时使用的条件&#xff0c;它不管on中的条件是否为真…