搭建服务端
node提供了net,dgram,http,https四个模块,分别用来处理TCP,UPD,HTTP,HTTPS。相比于其他语言,可以很快的搭建起服务端!
1、TCP服务的搭建
1.1、简单的搭建
传输之前需要三次握手形成会话,会话形成后服务端和客户端才可以发送数据。在创建会话的过程中,服务端和客户端分别提供一个套接字,通过这个套接字实现两者之前连接的操作。一个简单的搭建实例,首先是服务端,监听connection进行连接!
//服务端搭建
var net = require('net')
var server = net.createServer()
server.on('connection', function(){
//日志,有客户端连接
})
//监听端口
server.listen(8989)
通过Telnet工具可以对服务端进行简单的测试!
然后是客户端的连接简单示例!
var net = require('net')
var client = net.connect({port:8989}, function(){
//连接服务端
})
client.on('data', function () {
})
1.2、TCP服务的事件详解
服务端事件:
对于通过net.createServer()创建的服务器来说,他是一个EventEmitter实例,他有以下几个事件
事件???????????????? | 说明 | listenning???????????????? | 将服务绑定在某个端口,通过server.listen()触发? ? ? ? | connection? ? ? ? ? ? | 每当有一个客户端进行连接的时候触发,可以进行日志记录等等 | close | 服务器关闭的时候触发 | error? | 服务器发生错误的时候触发,如果不对error进行监听,会将遇到的异常进行抛出 |
连接事件:
服务端和客户端进行连接之后会进行数据传输,这里有如下自定义事件:
事件???????????????? | 说明 | data? ? ? ? | 当客户端或者服务端调用write事件进行写入操作时,另外一端会触发data事件,进行数据接收之后的操作? ? ? ? | end? ? ? ? | 当连接的任意一端发送FIN(TCP四次握手断开连接),触发该事件? ? ?? | connect | 当客户端与服务端进行连接时触发 | drain | 当客户端或者服务端调用write且发送的数据大于(一次性发送的)大于限制值(16kb)时触发,为了处理流,通常使用pipe() | error | 异常发生时触发 | close | 套接字完全关闭时触发 | timeout | 一段时间没有活跃,比如没有发送心跳包时触发 |
需要注意的是,Node中发送小数据包的时候默认会使用Nagle算法,也就是会将多次的小数据合成大数据包发出。
使用pipe()实现管道操作,流操作可以有效的减少对内存的占用。
流的特点:
1、边读? 边写,是边读边写的,读取一段文件,就将它写入
2、流是基于事件的,所有的流对象都用 on绑定事件,并触发
2、UDP服务的搭建
2.1、简单的搭建
UDP套接字一旦创建,既可以作为客户端发送数据,也可以作为服务端接收数据!
var dgram = require('dgram')
var socket = dgram.createSocket('udp4')
2.2、创建服务端
?
var dgram = require('dgram')
var socket = dgram.createSocket('udp4')
?server.on('messagr', function(){
})
server.on('listenning', function(){
})
server.bind(端口)
2.3、创建客户端
?
var dgram = require('dgram')
var client= dgram.createSocket('udp4')
// msg为Buffer对象
client.send(msg,0,msg.length,端口,'ip',function() {
})
?
3、HTTP的实现
|