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.pswp.cn/news/252115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252115.shtml
英文地址,請注明出處:http://en.pswp.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中的條件是否為真…