最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js開發(fā)之套接字(socket)編程入門示例

 更新時間:2019年11月05日 11:00:05   作者:蒼青浪  
這篇文章主要介紹了Node.js開發(fā)之套接字(socket)編程,結合簡單實例形式分析了node.js套接字socket客戶端與服務器端相關實現(xiàn)與使用技巧,需要的朋友可以參考下

本文實例講述了Node.js套接字(socket)編程。分享給大家供大家參考,具體如下:

Node.js的net模塊提供了socket編程接口,方便我們利用較為底層的套接字接口來實現(xiàn)應用協(xié)議。這次我們看一個簡單的回顯服務器示例,包括服務端和客戶端的代碼。

代碼

分服務器和客戶端兩部分來說吧。

server代碼分析

server.js:

var net = require("net");
// server is an instance of net.Server
// sock is an instance of net.Socket
var server = net.createServer(function(sock){
 console.log('client connected, address - ', sock.remoteAddress, ' port - ', sock.remotePort);
 sock.setEncoding('utf8');
 sock.on('data', function(data){
  console.log('got data from client - ', data);
  sock.write(data);
 });
 sock.on('end', function(){
  console.log('client disconnected');
 });
 sock.on('error', function(err){
  console.log('socket error - ', err);
 });
});
server.maxConnections = 10;
server.listen(7, function(){
 console.log('echo server bound at port - 7');
});

使用net.createServer來創(chuàng)建一個服務器實例,這個方法的返回值是一個net.Server實例,net.Server提供了listen方法,讓我們監(jiān)聽到某個端口上來接受客戶端連接,同時還提供了一些屬性,比如maxConnections可以設置服務器的并發(fā)連接數(shù)上限(當服務器的連接數(shù)超過這個值時,后續(xù)連接就會被拒掉),還有其它的,看文檔吧:https://nodejs.org/api/net.html#net_class_net_server。

net.Server還提供了一些事件,比如error、connection等。當有客戶端連接被接受時,會發(fā)射connection事件,這個事件帶一個net.Socket對象作為參數(shù),可以在回調(diào)函數(shù)里訪問這個net.Socket實例來與客戶端交互。我在代碼里,給createServer方法傳入了一個callback來處理connection事件,實際上也可以略作修改,通過監(jiān)聽connection事件的方法處理客戶端連接。新代碼如下:

var net = require("net");
var server = net.createServer();
server.on('connection', function(sock){
 console.log('client connected, address - ', sock.remoteAddress, ' port - ', sock.remotePort);
 sock.setEncoding('utf8');
 sock.on('data', function(data){
  console.log('got data from client - ', data);
  sock.write(data);
 });
 sock.on('end', function(){
  console.log('client disconnected');
 });
 sock.on('error', function(err){
  console.log('socket error - ', err);
 });
});
server.maxConnections = 10;
server.listen(7, function(){
 console.log('echo server bound at port - 7');
});

效果是一樣的。

net.Socket對象有一些方法,比如write可以寫數(shù)據(jù)。還有一些事件,比如error、end、data等,看代碼就能明白用法。還有一些屬性,比如remoteAddress、remotePort。

client代碼分析

client.js:

var net = require("net");
var readline = require('readline');
console.log('type "exit" or "quit" to quit.');
// sock is an instance of net.Socket
var sock = net.connect({port: 7}, function(){
 console.log('server connected');
 sock.setEncoding('utf8');
 sock.write('Hello Echo Server\r\n');
});
sock.on('data', function(data){
 console.log('got data from server - ', data);
});
sock.on('end', function(){
 console.log('client disconnected');
});
sock.on('error', function(err){
 console.log('socket error - ', err);
});
sock.on('close', function(){
 console.log('echo client was closed');
 process.exit(0);
});
var rl = readline.createInterface({
 input: process.stdin
});
function quitEcho(){
 rl.close();
 sock.end();
 console.log('quit echo client');
}
rl.on('line', function(cmd){
 if(cmd.indexOf('quit') == 0 || cmd.indexOf('exit') == 0){
  quitEcho();
 }else{
  sock.write(cmd + '\r\n');
 }
});
rl.on('SIGINT', quitEcho);

調(diào)用readline模塊來從標準輸入讀取數(shù)據(jù)來發(fā)送給客戶端。readline的文檔在這里:https://nodejs.org/api/readline.html。正如它的名字,Readline可以讓你一行一行的讀取一個流。比較常見的就是讀取標準輸入流。Readline有一些事件,我們用到的“l(fā)ine”事件,在一行數(shù)據(jù)就緒時會發(fā)射,帶一個代表數(shù)據(jù)的參數(shù)。監(jiān)聽line事件,在回調(diào)中調(diào)用net.Socket的write方法寫入數(shù)據(jù)。當你在控制臺輸入“quit”或“exit”時,調(diào)用quitEcho退出。

net.connect方法可以連接到指定的服務器,它的原型如下:

net.connect(options[, connectionListener])

第一個參數(shù)是Object,用于指定和連接相關的選項,比如服務端的host、port等,如果不指定host,就默認用localhost作為服務端主機名.

net.connect返回net.Socket對象,一旦拿到了Socket實例,就可以用net.Socket來為所欲為了。監(jiān)聽了data事件來接收服務端發(fā)揮的數(shù)據(jù),監(jiān)聽close事件來退出進程。net.Socket的具體API,參考https://nodejs.org/api/net.html#net_class_net_socket。

希望本文所述對大家node.js程序設計有所幫助。

相關文章

  • Node搭建https服務器實例詳解

    Node搭建https服務器實例詳解

    這篇文章主要介紹了Node搭建https服務器的方法,結合實例形式詳細分析了創(chuàng)建ssl證書以及node.js調(diào)用https模塊搭建https服務器的相關操作技巧,需要的朋友可以參考下
    2023-04-04
  • Node.js實現(xiàn)登錄注冊功能

    Node.js實現(xiàn)登錄注冊功能

    這篇文章主要為大家詳細介紹了Node.js實現(xiàn)登錄注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • nodejs中簡單實現(xiàn)Javascript Promise機制的實例

    nodejs中簡單實現(xiàn)Javascript Promise機制的實例

    這篇文章主要介紹了nodejs中簡單實現(xiàn)Javascript Promise機制的實例,本文在nodejs中簡單實現(xiàn)一個promise/A 規(guī)范,需要的朋友可以參考下
    2014-12-12
  • node.js版本管理工具n無效的原理和解決方法

    node.js版本管理工具n無效的原理和解決方法

    大家都知道在Centos中一般需要根據(jù)項目的環(huán)境安裝指定版本的Node, 而現(xiàn)有的yum源版本一般不夠全面也不一定找的到所需要的指定版本, 此時就必須自行下載Node源碼進行編譯安裝了,如果你在使用node.js版本管理工具n的時候發(fā)現(xiàn)工具無效,下面就來看看這篇文章的解決方法吧。
    2016-11-11
  • Node.js和Express中設置TypeScript的實現(xiàn)步驟

    Node.js和Express中設置TypeScript的實現(xiàn)步驟

    本文主要介紹了Node.js和Express中設置TypeScript的實現(xiàn)步驟文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • Nodejs環(huán)境實現(xiàn)socket通信過程解析

    Nodejs環(huán)境實現(xiàn)socket通信過程解析

    這篇文章主要介紹了Nodejs環(huán)境實現(xiàn)socket通信過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Node.js入門教程:在windows和Linux上安裝配置Node.js圖文教程

    Node.js入門教程:在windows和Linux上安裝配置Node.js圖文教程

    這篇文章主要介紹了Node.js入門教程:在windows和Linux上安裝配置Node.js的方法,本文圖文并茂,步驟明細,是學習安裝node.js的絕佳教程,需要的朋友可以參考下
    2014-08-08
  • Node.js?中的服務器相關概念(常見的服務器任務)

    Node.js?中的服務器相關概念(常見的服務器任務)

    Node.js?中,服務器的創(chuàng)建與管理是非常重要的內(nèi)容,Node.js?的非阻塞?I/O?特性使得它特別適合處理高并發(fā)的請求,本文將介紹一些與?Node.js?服務器相關的基本概念,包括?HTTP?服務器、請求和響應、路由、以及如何處理常見的服務器任務,感興趣的朋友一起看看吧
    2025-04-04
  • nodejs報digital?envelope?routines::unsupported錯誤的最新解決方法

    nodejs報digital?envelope?routines::unsupported錯誤的最新解決方法

    這篇文章主要介紹了nodejs報digital?envelope?routines::unsupported錯誤的最新解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 淺析Node在構建超媒體API中的作用

    淺析Node在構建超媒體API中的作用

    超媒體即Hypermedia,是一種采用非線性網(wǎng)狀結構對塊狀多媒體信息(包括文本、圖像、視頻等)進行組織和管理的技術。超媒體的概念類似于早期的超文本,超文本的本質(zhì)是在文本內(nèi)容加上鏈接,這樣就構成了超文本。超媒體也類似。
    2014-07-07

最新評論

招远市| 闸北区| 黄山市| 东安县| 沈丘县| 渭源县| 子洲县| 樟树市| 道孚县| 陆川县| 绩溪县| 武陟县| 宜城市| 大姚县| 水城县| 晋中市| 洞头县| 绥化市| 疏勒县| 肃宁县| 潜江市| 府谷县| 阿拉尔市| 慈溪市| 阜康市| 平邑县| 孙吴县| 嘉兴市| 临清市| 常州市| 扬州市| 平江县| 博爱县| 仁布县| 罗定市| 平江县| 自治县| 安阳市| 长白| 汉寿县| 玛曲县|