NodeJs网络编程之搭建TCP,UDP连接

node平台具有事件驱动,单线程,异步IO非阻塞等特性,有非常好的可伸缩性,适合在分布式网络里扮演各种各样的角色。

实现TCP连接

TCP服务在网络应用中十分常见,大多数的应用是基于TCP搭建的。TCP全名传输控制协议,在7层模型里属于传输层协议。同时TCP服务是面向连接的服务,需要进行三次握手形成对话。

创建TCP的服务器端

var net = require('net');
var server = net.createServer(function (socket) {
    socket.on('data',function (data) {
        socket.write('hello !');
    });

    socket.on('end',function () {
        console.log("连接断开");
    });

    socket.write("welcome!");
});


server.listen(8124,function () {
    console.log("server bound");
});

我们使用net.createServer(listener)创建服务器,而listener是监听器,它本质上是一个EventEmitter实例,他的自定义绑定监听事件包括listening,connection,close,error下面的方式也可实现监听功能。

var net = require("net");
var server = net.creatServer();
server.on('connection',function(){
    //连接后的内容
    console.log("connect");
});
server.listen(8124);

TCP客户端发起请求

我们可以利用Telnet来进行简单连接请求。

telnet 127.0.0.1 8124

或是通过net模块进行会话。

var net =require("net");
var client = net.connect({port:8124},function () {
    console.log("client conneted");
    client.write("world");
});

client.on("data",function (data) {
    console.log(data.toString());
    client.end();
});

client.on("end",function () {
    console.log("client disconneting");
});

服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读的stream对象,他既可以通过data事件读取,也可以通过write()方法发送数据。它具有的自定义事件包括data,end,connect,drain,error,close,timeout,除此之外可以利用pipe实现管道操作

var server = net.creatServer(function(socket){
    socket.pipe(socket);
})

同时,TCP针对网络中的小数据包使用Nagle算法进行优化,要求缓冲区的数据达到一定数据或者一定时间才发出,所以小数据包可能会合并发出,这样虽然网络带宽能有效使用,但是数据可能被延迟发送。如果不想使用,可以使用socket.setNoDelay(true)去掉。

实现UDP连接

UDP套接字既可以作为客户端发送数据,也可以作为服务器接收数据。

创建UDP服务器端

想让套接字接收网络消息,绑定网卡和端口即可。

var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message",function(msg,rinfo){
    console.log("server got:" + msg + " from " + rinfo.address + ":" + rinfo.port);
});
server.on("listening",function(){
    var address = server.address();
    console.log("server listening" + address.address + ":" + address.port);
});
server.bind(41234);

创建UDP客户端

var dgram = require("dgram");
var message = new Buffer("nodejs");
var client = dgram.createSocket("udp4");
client.send(message,0,message.length,41234,"localhost",function(err,bytes){
    client.close();
});

这里发送参数
socket.send(buf,offset,length,port,address,[callback]).

  • UDP套接字也只是个EventEmitter的实例,而不是Stream实例,具备message,listen,close,error事件。

你可能感兴趣的:(node.js)