首页 > 新闻 > 专家观点 >

阿里云 OCS SDK for NodeJS介绍

2014-08-12 15:34:54   作者:   来源:aliyun.com   评论:0  点击:


  • 运行 Javascript

  虽然让 Javascript 运行于服务器端不是 NodeJS 的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端应用程序间共享代码的愿望只能通过 Javascript 来实现。虽然还存在其他一些支持 Javascript 在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。

  • 阿里云 OCS SDK for NodeJS

  阿里云 OCS 服务采用的是基于 SASL 认证的 Memcached 二进制传输协议。实现该协议的 NodeJS 开源模块很少,有一些模块如 memjs 虽然实现了 SASL 认证和 Memcached 二进制传输协议,但是不支持命令队列即在一个命令返回数据之前无法执行新的命令,这在实际项目开发中是无法接受的。因此,阿里云 OCS SDK for NodeJS 基于 memjs 增加了命令队列,异常处理,自动重新连接等功能,使 NodejS 开发者快速接入阿里云 OCS 服务成为可能。

  该开源项目代码托管在 https://github.com/aliyun-UED/node_memcached ,欢迎有兴趣的同学贡献代码。

  另外,一定会有人问到 Redis 的问题。Redis 是一种常用的开源内存键值存储系统,可支持有序集合和列表等数据结构。Redis 在 NodeJS 社区中比较常见,而且也有很多成熟的模块支持。在阿里云 OCS 服务后续集成 Redis 后开发者可以自行选择 Memcached 或者 Redis 作为存储系统,我们届时也会将 Redis SDK 集成到阿里云 SDK for NodeJS 中。不过对于开发者来说在代码开发方式上,Memcached 与 Redis 非常相似,只不过所需要调用的接口不同而已。

  使用阿里云 OCS SDK 开发 web 应用

  在文章开始我们介绍了 OCS SDK 的最基本用法,比如我们想记录 web 应用的总访问量,可以在 OCS 中使用一个 key 代表这个总访问量,每当产生用户访问的时候,可以从 OCS 中读取 key 的值 value,将 value + 1 后再保存到 key。在这个场景中使用 OCS 在合适不过了,因为我们可能有多个 ECS 实例作为 web server,它们可以向同一个 OCS 做读写操作;另外也不用担心 ECS 实例挂掉后总访问量这个数据消失的问题;最后, OCS 的高性能也保证了我们的业务需求。

  除此之外,使用 OCS 最合适的地方就是 session 存储了。在 web 服务器上的 session 可以存储在

  • 内存
  • 磁盘文件系统
  • 数据库

  Memcached 等缓存系统

  从性能,可用性角度考虑,存储在 Memcached 是最好的选择。那么在 NodeJS 中该如何实现呢。

  一般来说,开发 NodeJS web 应用需要选择一个合适的 web 框架,我们以目前最流行的 web 框架 Express 举例。

  Express 框架内建了对 session 处理的支持,它默认的 session 存储机制是内存存储,而将其他 session 存储机制作为可扩展选项。如下代码所示:

  // 创建一个 express 实例
  var app = require(“express”);
  // 内存存储 session
  var session = require(‘express-session’)
  // 使用 express 的 session 处理,并使用内存存储机制
  app.use(session({ secret: ‘keyboard cat’, cookie: { maxAge: 60000 }}))
  // 处理 HTTP 请求,req 代表请求对象,res 代表返回对象
  app.use(function(req, res) {
  // sess 即为该请求所对应的用户的 session,不用担心,express 已经帮你分析请求所带的 cookie
  // 并将该 cookie 所对应的 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 会在请求处理结束后自动写回到 session 的存储中
  sess.views = 1
  res.end(‘welcome to the session demo. refresh!’)
  }
  })

  从上面的代码中可见,我们只需要实现 session 的存储机制,便能够和 express 完美的结合了。

分享到: 收藏

专题