NodeJs对session的处理、进程间通信
对于session的处理
最近项目中有用到NodeJs,也在学习。开发过程中发现,NodeJs对于session的处理方式与普通服务器不同。
- NodeJs服务器收到请求后,会为本次请求创建session,但是如果这次请求中没有对session的处理(放值等操作),在请求返回时不会做set-cookie操作,该次请求不会生成cookie。所以重复调用该请求每次都会生成一个新的session;
- 请求处理函数中对session有操作,返回时有set-cookie,生成cookie,下次请求时不会生成新的session;
进程通信
Node开始时是单线程,为了有效利用资源,后来增加了child_process可以多进程。后来又封装了cluster模块,更好的处理多进程。进程间通信主要依赖于监听。
1 | var cluster = require('cluster'); |
cluster对象
cluster的各种属性和函数
- cluster.setttings:配置集群参数对象
- cluster.isMaster:判断是不是master节点
- cluster.isWorker:判断是不是worker节点
- Event: ‘fork’: 监听创建worker进程事件
- Event: ‘online’: 监听worker创建成功事件
- Event: ‘listening’: 监听worker向master状态事件
- Event: ‘disconnect’: 监听worker断线事件
- Event: ‘exit’: 监听worker退出事件
- Event: ‘setup’: 监听setupMaster事件
- cluster.setupMaster([settings]): 设置集群参数
- cluster.fork([env]): 创建worker进程
- cluster.disconnect([callback]): 关闭worket进程
- cluster.worker: 获得当前的worker对象
- cluster.workers: 获得集群中所有存活的worker对象
worker对象
worker的各种属性和函数:可以通过cluster.workers, cluster.worket获得。
- worker.id: 进程ID号
- worker.process: ChildProcess对象
- worker.suicide: 在disconnect()后,判断worker是否自杀
- worker.send(message, [sendHandle]): master给worker发送消息。注:worker给发master发送消息要用process.send(message)
- worker.kill([signal=’SIGTERM’]): 杀死指定的worker,别名destory()
- worker.disconnect(): 断开worker连接,让worker自杀
- Event: ‘message’: 监听master和worker的message事件
- Event: ‘online’: 监听指定的worker创建成功事件
- Event: ‘listening’: 监听master向worker状态事件
- Event: ‘disconnect’: 监听worker断线事件
- Event: ‘exit’: 监听worker退出事件