NodeJsネットワークプログラミングの構築TCP、UDP接続

3042 ワード

nodeプラットフォームはイベントドライブ、シングルスレッド、非同期IOなどの特性があり、非常に良い伸縮性があり、分散型ネットワークで様々な役割を演じるのに適しています.
TCP接続を実現する
TCPサービスはネットワーク応用において非常に一般的であり、ほとんどのアプリケーションはTCPに基づいて構築されている.TCPフルネーム転送制御プロトコルは、7層モデルにおいてトランスポート層プロトコルに属する.また、TCPサービスは接続に向けたサービスであり、3回握手して会話を形成する必要があります.
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.create Serverを使ってサーバーを作成します.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
あるいはネットモジュールを通じて会話をします.
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.set NoDelay(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,[calback])を送ります.
  • UDPソケットもただのEventEmitterの例であり、Streamの例ではなく、message、listen、close、errorイベントを備えています.