本篇文章給大家分享的是有關怎么在Node.js中實現套接字,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創新互聯公司是一家集網站建設,路南企業網站建設,路南品牌網站建設,網站定制,路南網站建設報價,網絡營銷,網絡優化,路南網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
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來創建一個服務器實例,這個方法的返回值是一個net.Server實例,net.Server提供了listen方法,讓我們監聽到某個端口上來接受客戶端連接,同時還提供了一些屬性,比如maxConnections可以設置服務器的并發連接數上限(當服務器的連接數超過這個值時,后續連接就會被拒掉),還有其它的,看文檔吧:https://nodejs.org/api/net.html#net_class_net_server。
net.Server還提供了一些事件,比如error、connection等。當有客戶端連接被接受時,會發射connection事件,這個事件帶一個net.Socket對象作為參數,可以在回調函數里訪問這個net.Socket實例來與客戶端交互。我在代碼里,給createServer方法傳入了一個callback來處理connection事件,實際上也可以略作修改,通過監聽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可以寫數據。還有一些事件,比如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);
調用readline模塊來從標準輸入讀取數據來發送給客戶端。readline的文檔在這里:https://nodejs.org/api/readline.html。正如它的名字,Readline可以讓你一行一行的讀取一個流。比較常見的就是讀取標準輸入流。Readline有一些事件,我們用到的“line”事件,在一行數據就緒時會發射,帶一個代表數據的參數。監聽line事件,在回調中調用net.Socket的write方法寫入數據。當你在控制臺輸入“quit”或“exit”時,調用quitEcho退出。
net.connect方法可以連接到指定的服務器,它的原型如下:
net.connect(options[, connectionListener])
第一個參數是Object,用于指定和連接相關的選項,比如服務端的host、port等,如果不指定host,就默認用localhost作為服務端主機名.
net.connect返回net.Socket對象,一旦拿到了Socket實例,就可以用net.Socket來為所欲為了。監聽了data事件來接收服務端發揮的數據,監聽close事件來退出進程。net.Socket的具體API,參考https://nodejs.org/api/net.html#net_class_net_socket。
以上就是怎么在Node.js中實現套接字,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。
本文名稱:怎么在Node.js中實現套接字
文章出自:http://vcdvsql.cn/article4/gjgjie.html
成都網站建設公司_創新互聯,為您提供網站導航、網站建設、自適應網站、軟件開發、靜態網站、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯