net (réseau)
net.Server classe #
Cette classe est utilisée pour créer un serveur TCP ou [IPC] [].
nouveau net.Server ([options] [, connectionListener]) #
- Renvoie: <net.Server>
Affichez [ net.createServer([options][, connectionListener])
] [ net.createServer()
].
net.Server
est un [ EventEmitter
] [] implémente les événements suivants:
événement 'close' #
Déclenché lorsque le serveur est fermé. Notez que s'il existe des connexions, cet événement ne sera déclenché qu'une fois toutes les connexions terminées.
événement 'connexion' #
- Objet de connexion <net.Socket>
Lorsqu'un nouvel établissement de connexion a déclenché socket
une net.Socket
instance d'un objet.
événement 'erreur' #
Déclenché lorsqu'une erreur se produit. Contrairement à [ net.Socket
] [], les 'close'
événements [ ] [] ne continueront pas à se déclencher après le déclenchement de cet événement, sauf si [ server.close()
] [] est appelé manuellement. server.listen()
Exemple dans [ ] [].
événement «écoute» #
Appelé lorsque le service est lié [ server.listen()
] [].
server.address () #
Si l'auditeur sur socket IP, l' adresse IP de liaison est retournée, les services de la famille d'adresse et le port ont signalé un système d'exploitation lorsque le système d'exploitation pour trouver une adresse assignée pour trouver le port spécifié est utile de revenir un. port
, family
Et address
bien: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
le Objet
Pour les serveurs écoutant sur des canaux ou des sockets de domaine UNIX, le nom sera renvoyé sous forme de chaîne
Exemples:
const server = net.createServer((socket) => { socket.end('goodbye\n'); }).on('error', (err) => { // handle errors here throw err; }); // grab an arbitrary unused port. server.listen(() => { console.log('opened server on', server.address()); });
Seulement dans le 'listening'
cas est déclenchée quand. Il peut être appeléserver.address()
server.close ([rappel]) #
- Renvoie: <net.Server>
Arrêtez le serveur d'accepter l'établissement de nouvelles connexions et conservez les connexions existantes. Cette fonction est asynchrone. Lorsque toutes les connexions sont fermées et que le serveur répond à l' 'close'
événement [ ] [], le serveur sera finalement fermé. L' 'close'
option sera appelée une fois qu'elle se produira. Fonction de rappel. Contrairement à cet événement, si le serveur n'est pas allumé lorsqu'il est éteint, l'erreur sera utilisée comme seul paramètre.
De retour server
.
server.connections #
server.getConnections()
plutôt [ ] [].
Le nombre de connexions simultanées sur le serveur.
Lors de l' envoi d' un socket
à utiliser child_process.fork()
lorsque le processus enfant est créé, il sera de retour null
. Pour interroger les fourches afin d'obtenir le nombre de connexions actives, vous pouvez utiliser asynchrone à la server.getConnections()
place.
server.getConnections (rappel) #
- Renvoie <net.Server>
Obtenez le nombre actuel de connexions simultanées du serveur de manière asynchrone. Fonctionne lorsque le socket est passé au processus enfant.
Les deux paramètres de la fonction de rappel sont err et count.
server.listen () #
Lancer un serveur écoute les connexions On net.Server
peut être TCP ou [IPC] [] serveur, en fonction de ce qu'il écoute.
Paramètres possibles:
- [
server.listen(handle[, backlog][, callback])
] [server.listen(handle)
] - [
server.listen(options[, callback])
] [server.listen(options)
] - [
server.listen(path[, backlog][, callback])
] [server.listen(path)
] pour les serveurs [IPC] [] - [
server.listen([port][, host][, backlog][, callback])
] [server.listen(port, host)
] pour les serveurs TCP
Cette fonction est asynchrone. Lorsque le serveur commence à écouter, l' 'listening'
événement [ ] [] sera déclenché. Le dernier paramètre callback
sera ajouté à [ 'listening'
] [] événements d'écouteur.
Tous les listen()
procédés peuvent transmettre un backlog
paramètre pour spécifier la longueur maximale de la file d' attente pour être connecté. La longueur réelle de sysctl fourni par le système d' exploitation, par exemple, dans le Linux tcp_max_syn_backlog
et somaxconn
. La valeur par défaut de ce paramètre est 511 (pas 512)
Description :
-
Tous les [
net.Socket
] [] sont définis surSO_REUSEADDR
(voir [socket (7)] []) -
server.listen()
La méthode peut être appelée plusieurs fois. Chaque appel suivant rouvrira le serveur en utilisant les options qu'il propose.
L'une des erreurs les plus courantes lors de l'écoute est EADDRINUSE
. En effet , un autre serveur est déjà à l' écoute de la demande port
/ path
/ handle
. Une façon de gérer cette situation consiste à réessayer après un certain temps:
server.on('error', (e) => { if (e.code === 'EADDRINUSE') { console.log('Address in use, retrying...'); setTimeout(() => { server.close(); server.listen(PORT, HOST); }, 1000); } });
______________________________________________________________________________________________________________________
net.Socket classe #
Cette classe est une abstraction de TCP ou UNIX Socket (les canaux nommés sont utilisés sous Windows, tandis qu'UNIX utilise des sockets de domaine). L'un net.Socket
est également un [flux duplex] [], il peut donc être lu ou écrit, et c'est également un [ EventEmitter
] [].
net.Socket
Peut être créé par l'utilisateur et communiquer directement avec le serveur. Par exemple, il est net.createConnection()
renvoyé via [ ] [], afin que les utilisateurs puissent l'utiliser pour communiquer avec le serveur.
Lorsqu'une connexion est reçue, elle peut également être créée par Node.js et transmise à l'utilisateur. Par exemple, il est obtenu en surveillant net.Server
l' 'connection'
événement [ ] [] déclenché sur un [ ] [], puis l'utilisateur peut l'utiliser pour communiquer avec le client.
nouveau net.Socket ([options]) #
Créez un objet socket.
options
<Objet> Les options disponibles sont:fd
: <numéro> Si ce paramètre est spécifié, un descripteur de fichier donné est utilisé pour encapsuler un socket existant, sinon un nouveau socket sera créé.allowHalfOpen
<boolean> indique s'il faut autoriser les connexions TCP semi-ouvertes. Voir les événements [net.createServer()
] [] et ['end'
] [] pour plus de détails . La valeur par défaut estfalse
.readable
<Booléen> Lorsqu'il est passé lefd
temps autorisé à lire prise, sinon il est ignoré. Par défautfalse
.writable
<Booléen> Lorsqu'il est passéfd
pour permettre la prise d' écriture, sinon il est ignoré. Par défautfalse
.
- Renvoie: <net.Socket>
Le socket nouvellement créé peut être un socket TCP ou un flux de point de terminaison [IPC] [], selon ce à quoi il se connecte à [ connect()
] [ socket.connect()
].
événement 'close' #
had_error
<boolean> True si le socket a des erreurs de transmission.
Cet événement est émis une fois que le socket est complètement fermé. Le paramètre had_error
est une valeur booléenne indiquant si la prise est fermée dépend de l'erreur de transmission.
événement 'connect' #
événement 'data' #
Cet événement est déclenché lors de la réception des données. data
Il est un paramètre Buffer
ou String
. codage des données par le socket.setEncoding()
réglage. (Voir la section [Flux lisible] [] pour plus d'informations.)
Notez que lors de l' Socket
envoi d' data
un événement lorsque, si aucun auditeur données seront perdues .
socket.write (données [, encodage] [, rappel]) #
Envoyer des données sur le socket. Le deuxième paramètre spécifie le codage de la chaîne - la valeur par défaut est le codage UTF8.
Si toutes les données sont correctement transférées dans le tampon du noyau, elles reviennent true
. Si tout ou partie des données est en file d'attente au sein de l'utilisateur, retournez false
. Lorsque le tampon est à nouveau libre, l' 'drain'
événement [ ] [] sera déclenché .
Lorsque les données sont finalement écrites, option callback
paramètre sera exécutée - ne peut être exécutée immédiatement.
_________________________________________________________________
Le module net dans node.js nous fournit diverses interfaces pour la communication avec le serveur TCP et le client.
1. Créez un serveur et écoutez le port
const
net =
require
(
'net'
);
//创建一个tcp服务
//参数一表示创建服务的一些配置
//参数二表示 事件 'connection' 监听回调函数
let server = net.createServer({
//表示是否允许一个半开的TCP连接,默认为false
allowHalfOpen: false,
//一旦来了连接,是否暂停套接字,默认为false
pauseOnConnect: false
});
server.listen(6666);
//一个新的连接建立时触发 'connection' 事件
server.on(
'connection'
,
function
(socket) {
//注意这里的socket是一个流,既可以读,也可以写
//当我们监听 'data' 事件后,系统就会不断的从流中读取数据
socket.on(
'data'
,
function
(data) {
console.log(
'服务器接收到 : '
, data.toString());
});
});
//服务调用 server.listen() 监听后就会触发该事件
server.on(
'listening'
,
function
() {
// address() 方法返回服务器地址信息对象
let addr = server.address();
console.log(`服务器监听 : ${addr.port} 端口`);
});
//服务关闭时触发,如果还有连接存在,则直到所有连接结束才会触发该事件
server.on(
'close'
,
function
() {
console.log(
'服务关闭'
);
});
//出现错误时触发
server.on(
'error'
,
function
(err) {
console.log(err);
});
const
net =
require
(
'net'
);
let server = net.createServer();
server.listen(6666,
'0.0.0.0'
,
function
() {
console.log(
'服务器监听开始'
);
});
//一个新的连接建立时触发 'connection' 事件
server.on(
'connection'
,
function
(socket) {
//获取当前服务器的连接数
server.getConnections(
function
(error,
count
) {
console.log(
'当前服务器的连接数 : '
,
count
);
});
socket.on(
'data'
,
function
(data) {
console.log(
'服务器接收到 : '
, data.toString());
});
});
server.on(
'close'
,
function
() {
console.log(
'服务器被关闭'
);
});
//5秒后手动关闭服务器,拒绝所有连接请求,已有连接全部关闭后,触发 'close' 事件
setTimeout(
function
() {
server.close();
}, 5000);
const
net =
require
(
'net'
);
let server = net.createServer();
server.listen(6666,
'0.0.0.0'
,
function
() {
console.log(
'服务器监听开始'
);
});
server.on(
'connection'
,
function
(socket) {
//获取当前服务器的连接数
server.getConnections(
function
(error,
count
) {
console.log(
'当前服务器的连接数 : '
,
count
);
});
console.log(
'客户端信息 : '
, socket.address());
//接收到数据时触发
socket.on(
'data'
,
function
(data) {
//我们可以从流中读取数据
console.log(
'服务器接收到 : '
, data.toString());
console.log(
'累计接收的数据大小 : '
, socket.bytesRead);
console.log(
'累计发送的数据大小 : '
, socket.bytesWritten);
//也可以向流中写入数据
let flag = socket.write(`服务器向你发送 : ${data.toString()} \r\n`);
console.log(
'flag : '
, flag);
console.log(
'当前已缓冲并等待写入流中的字节数 : '
, socket.bufferSize);
});
//连接关闭时触发
socket.on(
'end'
,
function
() {
console.log(
'客户端关闭'
);
});
//连接完全关闭时触发
socket.on(
'close'
,
function
() {
console.log(
'客户端完全关闭'
);
});
//发生错误时触发
socket.on(
'error'
,
function
(err) {
console.log(err);
});
});