a级片网址,www.一级毛片,日批国产,中文字幕日韩精品有码视频,黄色毛片免费网站,久久久精品午夜免费不卡,天堂福利视频

 首頁 > 新聞 > 專家觀點 >

阿里云 OCS SDK for NodeJS介紹

2014-08-12 15:34:54   作者:   來源:aliyun.com   評論:0  點擊:


  • 運行 Javascript

  雖然讓 Javascript 運行于服務(wù)器端不是 NodeJS 的獨特之處,但卻是其一強大功能。不得不承認(rèn),瀏覽器環(huán)境限制了我們選擇編程語言的自由。任何服務(wù)器與日益復(fù)雜的瀏覽器客戶端應(yīng)用程序間共享代碼的愿望只能通過 Javascript 來實現(xiàn)。雖然還存在其他一些支持 Javascript 在服務(wù)器端 運行的平臺,但因為上述特性,Node發(fā)展迅猛,成為事實上的平臺。

  • 阿里云 OCS SDK for NodeJS

  阿里云 OCS 服務(wù)采用的是基于 SASL 認(rèn)證的 Memcached 二進制傳輸協(xié)議。實現(xiàn)該協(xié)議的 NodeJS 開源模塊很少,有一些模塊如 memjs 雖然實現(xiàn)了 SASL 認(rèn)證和 Memcached 二進制傳輸協(xié)議,但是不支持命令隊列即在一個命令返回數(shù)據(jù)之前無法執(zhí)行新的命令,這在實際項目開發(fā)中是無法接受的。因此,阿里云 OCS SDK for NodeJS 基于 memjs 增加了命令隊列,異常處理,自動重新連接等功能,使 NodejS 開發(fā)者快速接入阿里云 OCS 服務(wù)成為可能。

  該開源項目代碼托管在 https://github.com/aliyun-UED/node_memcached ,歡迎有興趣的同學(xué)貢獻代碼。

  另外,一定會有人問到 Redis 的問題。Redis 是一種常用的開源內(nèi)存鍵值存儲系統(tǒng),可支持有序集合和列表等數(shù)據(jù)結(jié)構(gòu)。Redis 在 NodeJS 社區(qū)中比較常見,而且也有很多成熟的模塊支持。在阿里云 OCS 服務(wù)后續(xù)集成 Redis 后開發(fā)者可以自行選擇 Memcached 或者 Redis 作為存儲系統(tǒng),我們屆時也會將 Redis SDK 集成到阿里云 SDK for NodeJS 中。不過對于開發(fā)者來說在代碼開發(fā)方式上,Memcached 與 Redis 非常相似,只不過所需要調(diào)用的接口不同而已。

  使用阿里云 OCS SDK 開發(fā) web 應(yīng)用

  在文章開始我們介紹了 OCS SDK 的最基本用法,比如我們想記錄 web 應(yīng)用的總訪問量,可以在 OCS 中使用一個 key 代表這個總訪問量,每當(dāng)產(chǎn)生用戶訪問的時候,可以從 OCS 中讀取 key 的值 value,將 value + 1 后再保存到 key。在這個場景中使用 OCS 在合適不過了,因為我們可能有多個 ECS 實例作為 web server,它們可以向同一個 OCS 做讀寫操作;另外也不用擔(dān)心 ECS 實例掛掉后總訪問量這個數(shù)據(jù)消失的問題;最后, OCS 的高性能也保證了我們的業(yè)務(wù)需求。

  除此之外,使用 OCS 最合適的地方就是 session 存儲了。在 web 服務(wù)器上的 session 可以存儲在

  • 內(nèi)存
  • 磁盤文件系統(tǒng)
  • 數(shù)據(jù)庫

  Memcached 等緩存系統(tǒng)

  從性能,可用性角度考慮,存儲在 Memcached 是最好的選擇。那么在 NodeJS 中該如何實現(xiàn)呢。

  一般來說,開發(fā) NodeJS web 應(yīng)用需要選擇一個合適的 web 框架,我們以目前最流行的 web 框架 Express 舉例。

  Express 框架內(nèi)建了對 session 處理的支持,它默認(rèn)的 session 存儲機制是內(nèi)存存儲,而將其他 session 存儲機制作為可擴展選項。如下代碼所示:

  // 創(chuàng)建一個 express 實例
  var app = require(“express”);
  // 內(nèi)存存儲 session
  var session = require(‘express-session’)
  // 使用 express 的 session 處理,并使用內(nèi)存存儲機制
  app.use(session({ secret: ‘keyboard cat’, cookie: { maxAge: 60000 }}))
  // 處理 HTTP 請求,req 代表請求對象,res 代表返回對象
  app.use(function(req, res) {
  // sess 即為該請求所對應(yīng)的用戶的 session,不用擔(dān)心,express 已經(jīng)幫你分析請求所帶的 cookie
  // 并將該 cookie 所對應(yīng)的 session 從存儲中找到并提供給你
  var sess = req.session
  // 下面是對 session 對象的處理
  if (sess.views) {
  sess.views++
  res.setHeader(‘Content-Type’, ‘text/html’)
  res.write(‘<p>views: ‘ + sess.views + ‘</p>’)
  res.write(‘<p>expires in: ‘ + (sess.cookie.maxAge / 1000) + ‘s</p>’)
  res.end()
  } else {
  // 更新后的 session 會在請求處理結(jié)束后自動寫回到 session 的存儲中
  sess.views = 1
  res.end(‘welcome to the session demo. refresh!’)
  }
  })

  從上面的代碼中可見,我們只需要實現(xiàn) session 的存儲機制,便能夠和 express 完美的結(jié)合了。

分享到: 收藏

專題

浦城县| 芦山县| 宁河县| 镇远县| 新建县| 普定县| 潍坊市| 那曲县| 紫金县| 安多县| 措美县| 襄城县| 台前县| 兴和县| 永修县| 永和县| 宝兴县| 蓬溪县| 达州市| 隆子县| 福贡县| 永济市| 青浦区| 华蓥市| 临武县| 内江市| 民和| 洪湖市| 瓮安县| 双辽市| 汝阳县| 楚雄市| 丹阳市| 琼结县| 鄂州市| 扎赉特旗| 汕尾市| 通渭县| 杭锦旗| 凤冈县| 威海市|