目次
IP テスト
Server# を返します。
[ net.connect(options[, connectionListener ])]
【new net.Socket([options])】
简易服务器
简易聊天室
ホームページ ウェブフロントエンド jsチュートリアル Nodejs の net モジュールに関する簡単な説明

Nodejs の net モジュールに関する簡単な説明

Mar 12, 2021 am 10:06 AM
ネットモジュール nodejs

Nodejs の net モジュールに関する簡単な説明

TCP サービスはネットワーク アプリケーションで非常に一般的で、現在のアプリケーションのほとんどは TCP に基づいて構築されています。 net モジュールは、サーバーとクライアントを作成するためのメソッドを含む、TCP ネットワーク プログラミング用の非同期ネットワーク ラッパーを提供します。この記事ではnodeJSのnetモジュールについて詳しく紹介します。

関連する推奨事項: 「nodejs チュートリアル

IP テスト

[net.isIP(input)]

入力が IP アドレスであるかどうかをテストします。文字列が無効な場合は 0 を返します。 IPV4 の場合は 4 を返し、IPV6 の場合は 6

var net = require('net');
console.log(net.isIP('1.1.1.1'));//4
console.log(net.isIP('1.1'));//0
console.log(net.isIP('AD80::ABAA:0000:00C2:0002'));//6
ログイン後にコピー

[net.isIPv4(input)]

入力アドレスが IPV4 の場合は true を返します。それ以外の場合は false

var net = require('net');
console.log(net.isIPv4('1.1.1.1'));//true
console.log(net.isIPv4('1.1'));//false
ログイン後にコピー

[net.isIPv6(input)]

入力アドレスが IPV6 の場合は true を返し、それ以外の場合は false

var net = require('net');
console.log(net.isIPv6('1.1.1.1'));//true
console.log(net.isIPv6('AD80::ABAA:0000:00C2:0002'));//true
ログイン後にコピー

Server# を返します。

##【 net.createServer([options][, connectionListener])]

次のパラメータを使用して TCP サーバーを作成します

options
    allowHalfOpen: false(默认),如果为true,当另一端socket发送FIN包时socket不会自动发送FIN包。socket变为不可读但可写(半关闭)
    pauseOnConnect: false(默认),如果为true,当连接到来的时候相关联的socket将会暂停。它允许在初始进程不读取数据情况下,让连接在进程间传递。调用resume()从暂停的socket里读取数据
connectionListener 自动给 'connection' 事件创建监听器
ログイン後にコピー
var server = net.createServer(function() {

});
ログイン後にコピー
[server.listen(port[ , host][, backlog][, callback ])]

指定されたポートとホストからの接続の受け入れを開始します。 host が省略された場合、サーバーは任意の IPv4 アドレス (INADDR_ANY) からの直接接続を受け入れます。ポートが 0 の場合、ランダムなポート

が割り当てられます。バックログは、接続待機キューの最大長です。実際の長さは、Linux の tcp_max_syn_backlog や somaxconn など、sysctl を介してオペレーティング システムによって設定されます。このパラメータのデフォルト値は 511

です。サーバーがバインドされると、「listening」イベントがトリガーされます。最後のパラメーターのコールバックは、「listening」イベントのリスナーとして使用されます。一部のユーザーは、要求されたポートで別のサーバーがすでに実行されていることを示す EADDRINUSE エラーが発生することがあります。この状況に対処する方法は、一定期間待ってから再試行することです

server.listen(6000);
ログイン後にコピー
[server.close([callback])]

サーバーは新しい接続の受信を停止し、既存の接続を維持します。接続。すべての接続が完了すると、サーバーが閉じられ、「close」イベントがトリガーされます。 「close」イベントをリッスンするコールバック関数を渡すことができます。存在する場合、コールバック関数はエラー (存在する場合) を唯一のパラメータとして呼び出されます。

[server.address()]

オペレーティング システムはバインドされたアドレス、プロトコル ファミリ名を返します。そしてサーバーポート。どのポートがシステムによってバインドされているかを調べる場合に非常に便利です。

[注意] 「listening」イベントがトリガーされる前にserver.address()を呼び出さないでください

server.listen(function() {
    //{ address: '::', family: 'IPv6', port: 53806 }
    console.log(server.address());
});
ログイン後にコピー
[server.maxConnections]

このオプションを設定した後、サーバー接続の数がその数を超えると、新しい接続は拒否されます

child_process.fork() メソッドを使用してソケットが子プロセスに送信されると、これはオプションは推奨されません

【server.getConnections(callback)】

サーバー上で現在アクティブな接続の数を非同期的に取得します。これは、ソケットが子プロセスに送信される場合にのみ有効です。

コールバック関数には 2 つのパラメーター err と count

server.getConnections(function(err,count){
    console.log(count);//0
})
ログイン後にコピー
[イベント リスニング]

サーバーが呼び出したときserver.listen binding 後でトリガーされます

[Event connection]

{Socket object} 连接对象
ログイン後にコピー
新しい接続が作成されたときにトリガーされます。ソケットは net.Socket のインスタンスです。

[イベント終了]

サーバーが閉じられるとトリガーされます

[注意] 接続がある場合、このイベントはすべての接続が接続されるまでトリガーされません。 閉じる

【イベント エラー】

エラーが発生するとトリガーされます

クライアント

[ net.connect(options[, connectionListener ])]

【net.createConnection(options[, connectionListener])】

connect() のエイリアスは createConnection() メソッドです

このメソッドは新しい「net.Socket」を返し、指定されたアドレスとポートに接続します。ソケットが確立されると、「connect」イベントがトリガーされます。 「net.Socket」と同じメソッドです。

TCP ソケットの場合、パラメータ オプションは次のとおりです。

port: 客户端连接到 Port 的端口(必须)
host: 客户端要连接到得主机。默认 'localhost'
localAddress: 网络连接绑定的本地接口
localPort: 网络连接绑定的本地端口
family : IP 栈版本。默认 4
ログイン後にコピー
ローカル ドメイン ソケットの場合、パラメータ オプションは次のとおりです

path: 客户端连接到得路径(必须)
ログイン後にコピー
var client = net.connect({port: 5000}, function() {});
ログイン後にコピー

Socket

【new net.Socket([options])】

新しいソケット オブジェクトの構築

options オブジェクトのデフォルトは次のとおりです。 value:

{ fd: null
  allowHalfOpen: false,
  readable: false,
  writable: false
}
ログイン後にコピー
パラメータ fd を使用すると、既存のファイル記述子を指定できます。 readable および (または) writable を true に設定すると、このソケットでの読み取りまたは書き込みが可能になります (パラメーター fd が有効な場合のみ)

#[socket.connect(port[, host][, connectListener])]

【socket.connect(path[, connectListener])]

受信ソケットを使用して接続を開きます。ポートとホストを指定すると、TCP ソケットがソケットを開きます。 host パラメータを省略した場合、デフォルトの localhost が使用されます。パスが指定されている場合、ソケットは指定されたパスの UNIX ソケットによってオープンされます。

パラメーター connectListener がリスナーとして「connect」イベントに追加されます

[socket.write( data[, エンコーディング] [, コールバック])]

ソケットでデータを送信します。 2 番目のパラメータは文字列のエンコーディングを指定します。デフォルトは UTF8 エンコーディングです

  如果所有数据成功刷新到内核缓冲区,返回true。如果数据全部或部分在用户内存里,返回false。当缓冲区为空的时候会触发'drain'

  当数据最终被完整写入的的时候,可选的callback参数会被执行,但不一定会马上执行

【socket.end([data][, encoding])】

  半关闭socket。例如,它发送一个FIN包。可能服务器仍在发送数据。

  如果参数data不为空,等同于调用socket.write(data,encoding)后再调用socket.end()

【socket.destroy()】

  确保没有 I/O 活动在这个套接字上。只有在错误发生情况下才需要

【socket.pause()】

  暂停读取数据。就是说,不会再触发 data 事件。对于控制上传非常有用

【socket.resume()】

  调用 pause() 后想恢复读取数据

【socket.setTimeout(timeout[, callback])】

  socket 闲置时间超过 timeout 毫秒后 ,将 socket 设置为超时。触发空闲超时事件时,socket 将会收到 'timeout'事件,但是连接不会被断开。用户必须手动调用 end() 或 destroy() 这个socket。

  如果 timeout = 0, 那么现有的闲置超时会被禁用。可选的 callback 参数将会被添加成为 'timeout' 事件的一次性监听器

【socket.setNoDelay([noDelay])】

  禁用纳格(Nagle)算法。默认情况下 TCP 连接使用纳格算法,在发送前他们会缓冲数据。将 noDelay 设置为 true 将会在调用 socket.write() 时立即发送数据。noDelay 默认值为 true

【socket.setKeepAlive([enable][, initialDelay])】

  禁用/启用长连接功能,在发送第一个在闲置socket上的长连接probe之前,可选地设定初始延时。默认false

  设定initialDelay(毫秒),来设定收到的最后一个数据包和第一个长连接probe之间的延时。将 initialDelay 设为0,将会保留默认(或者之前)的值。默认值为0

【socket.address()】

  操作系统返回绑定的地址,协议族名和服务器端口。返回的对象有 3 个属性,比如{ port: 12346, family: 'IPv4', address: '127.0.0.1' }

【socket.remoteAddress】

  远程的 IP 地址字符串

【socket.remoteFamily】

  远程IP协议族字符串

【socket.remotePort】

  远程端口,数字表示

【socket.localAddress】

  远程客户端正在连接的本地IP地址,字符串表示

【socket.localPort】

  本地端口地址,数字表示

【socket.bytesRead】

  接收的字节数

【socket.bytesWritten】

  发送的字节数

【事件lookup】

  在解析域名后,但在连接前,触发这个事件。对 UNIX sokcet 不适用

err {Error | Null} 错误对象
address {String} IP 地址。
family {String | Null} 地址类型
ログイン後にコピー

【事件connect】

  当成功建立 socket 连接时触发、

【事件data】

{Buffer object}
ログイン後にコピー

  当接收到数据时触发。参数 data 可以是 Buffer 或 String

  当 Socket 触发一个 'data' 事件时,如果没有监听器,数据将会丢失

【事件end】

  当 socket 另一端发送 FIN 包时,触发该事件

【事件timeout】

  当 socket 空闲超时时触发,仅是表明 socket 已经空闲。用户必须手动关闭连接

【事件drain】

  当写缓存为空得时候触发。可用来控制上传

【事件error】

  错误发生时触发

【事件close】

had_error {Boolean} 如果 socket 传输错误,为 true
ログイン後にコピー

  当 socket 完全关闭时触发。参数 had_error 是 boolean,它表示是否因为传输错误导致 socket 关闭

简易服务器

【服务器】

//server.js
var net = require('net') ;
var server = net.createServer(function(socket) { 
    socket.write("Hi!\n");
    socket.on("data", function(data) {
      console.log(data.toString());
    });
    socket.on("end", function() {
      console.log('有客户机下线了!!!');
    });
    socket.on('error', function() {
      console.log('发生意外错误!!!');
    });
}) ;
server.listen(8080) ;
ログイン後にコピー

【客户机】

//client.js
var net = require('net') ;
var client = net.connect({port: 8080},function(){
    client.name = '客户机1';
    client.write(client.name + ' 上线了!\n');
    client.end(client.name + ' 下线了!\n');
    client.on("data", function(data) {
        console.log(data.toString());
    });
});
ログイン後にコピー

简易聊天室

【服务器】

//chatServer.js
var net = require('net');
var i = 0;
//保存客户机
var clientList = [];
var server = net.createServer(function(socket) {
    socket.name = '用户' + (++i);
    socket.write('【聊天室提示】欢迎' + socket.name + '\n');
    //更新客户机数组
    clientList.push(socket); 
    function showClients(){
        console.log('【当前在线用户】:');
        for(var i=0;i<clientList.length;i++) { 
            console.log(clientList[i].name);
        }        
    }
    showClients();
    socket.on("data", function(data) {
        //把当前连接的客户机的信息转发到其他客户机  
        for(var i=0;i<clientList.length;i++) { 
            if(socket !== clientList[i]) {      
                clientList[i].write('【' + socket.name + '】:' + data);   
            }  
        }
    });
    socket.on("close", function() {
        //当前客户机下线时,将其从客户机数组中移除
        clientList.splice(clientList.indexOf(socket), 1);
        showClients();
    });
    socket.on('error', function(err) {
        console.log(socket.name + '退出');
    });
});
server.listen(8080) ;
ログイン後にコピー

【客户机】

//chatClient.js
var net = require('net');
process.stdin.resume();
process.stdin.setEncoding('utf8');
var client = net.connect({port: 8080},function(){
    console.log('【本机提示】登录到聊天室');
    process.stdin.on('data',function(data){
        client.write(data);
    })
    client.on("data", function(data) {
        console.log(data.toString());
    });
    client.on('end', function() {
        console.log('【本机提示】退出聊天室');
        process.exit();
    });
    client.on('error', function() {
        console.log('【本机提示】聊天室异常');
        process.exit();
    });
});
ログイン後にコピー

更多编程相关知识,请访问:编程入门!!

以上がNodejs の net モジュールに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

NodejsとTomcatの違い NodejsとTomcatの違い Apr 21, 2024 am 04:16 AM

Node.js と Tomcat の主な違いは次のとおりです。 ランタイム: Node.js は JavaScript ランタイムに基づいていますが、Tomcat は Java サーブレット コンテナです。 I/O モデル: Node.js は非同期ノンブロッキング モデルを使用しますが、Tomcat は同期ブロッキング モデルです。同時実行処理: Node.js はイベント ループを通じて同時実行を処理しますが、Tomcat はスレッド プールを使用します。アプリケーション シナリオ: Node.js はリアルタイム、データ集約型、同時実行性の高いアプリケーションに適しており、Tomcat は従来の Java Web アプリケーションに適しています。

Nodejsとvuejsの違い Nodejsとvuejsの違い Apr 21, 2024 am 04:17 AM

Node.js はサーバー側の JavaScript ランタイムであり、Vue.js は対話型ユーザー インターフェイスを作成するためのクライアント側の JavaScript フレームワークです。 Node.js はバックエンド サービス API 開発やデータ処理などのサーバー側開発に使用され、Vue.js はシングルページ アプリケーションや応答性の高いユーザー インターフェイスなどのクライアント側開発に使用されます。

Nodejs はバックエンド フレームワークですか? Nodejs はバックエンド フレームワークですか? Apr 21, 2024 am 05:09 AM

Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

Nodejs はバックエンド開発言語ですか? Nodejs はバックエンド開発言語ですか? Apr 21, 2024 am 05:09 AM

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Apr 21, 2024 am 05:18 AM

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

Nodejsのグローバル変数とは何ですか Nodejsのグローバル変数とは何ですか Apr 21, 2024 am 04:54 AM

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

NodejsとJavaの間に大きな違いはありますか? NodejsとJavaの間に大きな違いはありますか? Apr 21, 2024 am 06:12 AM

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

See all articles