目录

  • 连接池

    • 基于
    • 一个简单的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

Node.js Up and Runing 学习日记(八)相关推荐

  1. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...

    前置: 本系列文章是一个本人边学习边梳理的学习笔记,俗话说好脑袋不如烂笔头,再好的记忆力时间长了也会有细节忘记,本项目选择的前端框架是vue,后端开发使用是node.js,数据库使用的是mongodb ...

  2. node JS獲取GPS_node学习笔记(三十八)

    一.什么是NodeJS? 1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 2.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效 ...

  3. Node.js之HTTP模块学习

     HTTP模块介绍: nodejs中的http模块封装了一个http服务器模块和一个简易的http客户端. http.Server是一个基于事件的http服务器 http.request是http客户 ...

  4. node.js毕业设计安卓英语学习app(程序+APP+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode +Mysql5.7 + HBuilderX+Navicat11+Vue+ ...

  5. node.js毕业设计安卓考研学习APP(程序+APP+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

  6. 下载Node.js和Node.js软件+Sass结合学习代码

    一.Sass是什么? 产生原因:在学习Sass之前,首先了解一下原生CSS语言,CSS仅仅是一个标记语言,不是编程语言,因此不可以自定义变量,也不可以引用.CSS主要有以下缺点. CSS是一门非程序式 ...

  7. [附源码]Node.js计算机毕业设计党员学习管理系统Express

    项目运行 环境配置: Node.js最新版+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue. 项目技术: Express框架 + Node.js+ Vue 等 ...

  8. node.js 入门操作 持续学习中

    系列文章目录 本系列为我的node.js学习记录,欢迎大家参考和指出我的不足. 目录 系列文章目录 前言 node.js模块开发 具体用法: 一些简单的系统模块 js代码测试: 总结 前言 首先今天原 ...

  9. node.js服务端代码学习

    node.js不会自动重启,需要用到supervisor,查看代码的更改,随时重启node.js supervisor 安装 $ npm install -g supervisor 运行 app.js ...

最新文章

  1. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
  2. Linux --进程间通信--共享内存
  3. 猫抓老鼠-Java面向对象特点梳理
  4. vue 圆形百分比进度条_快速构建一个圆形的进度条
  5. 【Linux入门到精通系列讲解】shell脚本语法入门教程(看一篇就够了)
  6. lamp环境搭建经验总结
  7. 语言里怎么防误输_育儿知识|我们的孩子为什么会怕输?
  8. Seata 单机环境搭建_01
  9. 微软python免费课程_微软再推免费在线Python教程 面向数据科学和机器学习初学者...
  10. 新浪API, 利用get_uid获取是uid的数据溢出问题解决方案
  11. python中英文字频率_python统计文本字符串里单词出现频率的方法
  12. win10连接共享打印机_win7共享出来的打印机部分电脑无法连接的问题
  13. 入侵网页html服务器,Web渗透入侵思路(脑图)| 内附彩蛋
  14. 《触动人心设计优秀iphone应用》读后感
  15. c语言编写51单片机中断程序,执行过程是怎样的?
  16. 苹果开发者账号申请 App IDs(应用身份证)
  17. 机器学习小组知识点14:均匀分布(Uniform Distribution)
  18. mysql反向递归查询_递归查询所有下级部门树形结构反向递归获取所有ID集合
  19. 戴尔出厂映像还原选项在Windows恢复丢失
  20. 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(附matlab代码)

热门文章

  1. mongodb查询值不为空_NoSQL之MongoDB——BSON与JSON类型
  2. 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?
  3. 深度学习之卷积神经网络(6)梯度传播
  4. 深度学习(8)TensorFlow基础操作四: 维度变换
  5. centos的mysql命令,Centos系统mysql相关命令
  6. 【算法竞赛学习】心跳信号分类预测-特征工程
  7. 解决 Gedit 中文乱码
  8. Valgrind 使用方法
  9. Lua中的模块和使用
  10. C++笔记——指向常量的指针/指针常量