Node提供丰富的网络编程模块
Node模块
协议
net
TCP
dgram
UDP
http
HTTP
https
HTTPS
TCP服务事件分为下面两类
(1)、服务器事件
对于通过net.createServer()创建的服务器而言,它是一个EventEmitter实例,自定义事件有以下几种:
listening :在调用listen()绑定端口或Domain Socket后触发,简写为server.listen(port, listener),通过第二个参数传入。
connection :每个客户端套接字连接到 服务器 时触发,简洁写法为通过net.createServer(),最后一个参数传递。
close :当服务器关闭时触发,在调用server.close()后,服务器将停止接受新的套接字连接,但保持当前存在的连接,等待所有连接断开后,会触发该事件。
error :当服务器发生异常时,将会触发该事件。
(2)、连接事件
服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读Stream对象。Stream对象可以用于服务端和客户端之间的通信,既可以通过data事件从一端读取另一端发来的数据,也可以通过write()方法从一端向另一端发送数据。
data :当一端调用write()发送数据时,另一端会触发data事件,事件传递的数据就是write()发送的数据
end :当连接中的任意一端发送FIN数据时,将会触发该事件。
connect :该事件用于 客户端 ,当套接字与服务器连接成功时会触发。
drain :当任意一端调用write()发送数据时,当前这端触发该事件。
error :当异常发送
close :当套接字完全关闭时触发
timeout :当一定时间后连接不再活跃时,触发该事件通知用户该连接被闲置了。
TCP针对网络中的小数据包有一定优化策略:Nagle算法,当数据达到一定量后才触发。
UDP服务
UDP称为用户数据包协议,其不是面向连接的服务。Node中UDP只是一个EventEmitter实例,而非Stream的实例,具备以下自定义事件:
(1) message :当UDP套接字监听网卡端口后,接受消息时触发,触发携带的数据为消息Buffer对象和一个远程地址信息。
(2) listening :当UDP套接字开始侦听时触发该事件。
(3) close :调用close()方法时触发该事件,并不再触发message事件。若需再次触发message事件,需要重新绑定。
(4) error :当异常发生时触发,若不监听直接抛出,使进程退出。
HTTP服务
Node中http模块继承自tcp服务器(net模块),它能与多个客户端保持连接,由于其不为每个连接创建线程,保持很低的内存占用,所以能实现高并发。HTTP服务和TCP服务区别在于,在开启keepalive之后,一个TCP会话可以用于多次请求和响应。TCP服务以connection为单位进行服务,HTTP服务以request单位进行服务。http模块是将connection到request的过程进行封装。
http模块将连接所用的套接字的读写抽象为ServerRequest和ServerResponse对象,分别对应请求和响应操作。
(1) HTTP请求
对于TCP连接的读操作,http模块将其封装为ServerRequest对象。如报头部分req.method、req.url、req.headers,报文体数据部分抽象为一个只读的流对象,若业务逻辑需要读取报文体中的数据,则需要这个数据流结束后才能进行操作。
(2) HTTP响应
HTTP响应封装了底层连接的写操作,可以将其看成一个可写的流对象。
响应报文头部信息方法:res.setHeader()和res.writeHeader()方法,可以多次setHeader进行设置,但必须调用writeHeader写入连接才生效。
报文体部分方法:res.write()和res.end()方法
(3) HTTP服务端事件
connection :客户端与服务端建立TCP连接时,触发一次connection事件
request :建立TCP连接后,http模块底层将数据流中抽象出HTTP请求和HTTP响应,当请求数据发送到服务端,在解析出HTTP请求头后触发该事件;在res.end()后,TCP连接可用于下一次请求。
close :调用server.close方法停止接收新的连接,已有的连接都断开时触发该事件。
checkContinue :某些客户端在发送较大数据时,先发送一个头部带有Expect: 100-continue的请求到服务器,服务触发该事件;
connect :当客户端发起CONNECT请求时触发
upgrade :当客户端要求升级连接的协议时,需要和服务端协商,客户端会在请求头中带上Updagrade字段
clientError :连接的客户端发送错误,错误传到服务端此时触发该事件
(4) HTTP客户端
http模块提供http.request(options, connect),用于构造HTTP客户端。
HTTP客户端和服务端类似,在ClientRequest对象中,它的事件叫做response,ClientRequest在解析响应报文的时,一解析完响应头就触发response事件,同时传递一个响应对象ClientResponse供操作,后续响应报文以只读流的方式提供。
(5) HTTP客户端事件
response :与服务端的request事件对应的客户端在请求发出后得到响应时触发该事件。
socket :当底层连接池中建立的连接分配给当前请求对象时触发;
connect :当客户端向服务器发送CONNECT请求时,若服务端响应了200状态码,客户端将会触发该事件。
upgrade :客户端享服务端发送Upgrade请求时,若服务端响应了101 Switching Protocols状态,客户端将会触发该事件。
continue :客户端向服务端发起Expect: 100-continue头信息后,以试图发送较大数据,若服务端响应100 continue状态,服务端将触发该事件
WebSocket服务
WebSocket最早是作为HTML5重要特性出现的,相比HTTP有以下优点:
(1) 客户端和服务端只建立一次TCP连接,可以使用更少的连接
(2) WebSocket服务端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效
(3) 更轻量级的协议头,减少数据传输
Node中没有内置WebSocket的库,但社区的ws模块封装了WebSocket的底层实现如著名的socket.io
NodeJS,网络编程
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]