亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Nodejs創(chuàng)建TCP服務器 - king0222

 更新時間:2015年09月24日 15:16:26   投稿:mrr  
這篇文章主要介紹了Nodejs創(chuàng)建TCP服務器 - king0222的相關資料,需要的朋友可以參考下

1.Nodejs提供了net模塊給我們,所以我們創(chuàng)建TCP服務器很簡單:

 require('net').createServer(function(socket) {
   // new connection
   socket.on('data', function(data) {
     // got data
   });
   socket.on('end', function(data) {
     // connection closed
   });
   socket.write('Some string');
 }).listen();

通過var server = require('net').createServer();這行代碼我們可以得到tcp服務器對象的引用。

server對象具注冊了以下幾個監(jiān)聽事件:

listening,connection,close,error

下面一個例子是在TCP服務器的聲明周期中監(jiān)聽了如上幾個事件:

var server = require('net').createServer();
 var port = ;
 server.on('listening', function() {
   console.log('Server is listening on port', port);
 });
 server.on('connection', function(socket) {
   console.log('Server has a new connection');
   socket.end();
   server.close();
 });
 server.on('close', function() {
   console.log('Server is now closed');
 });
 server.on('error', function(err) {
   console.log('Error occurred:', err.message);
 });
 server.listen(port);

一旦建立連接成功后,會得到一個socket對象作為回調中的參數(shù),我們可以操作這個socket對象,前面提到過tcp連接的對象是可讀可寫的流。作為一個流對象,因此能夠監(jiān)聽data,end等事件;作為一個可寫流,具有write()方法。 下面是一個能夠監(jiān)聽用戶輸入的例子:

 var server = require('net').createServer(function(socket) {
   console.log('new connection');
   socket.setEncoding('utf');
   socket.write("Hello! You can start typing. Type 'quit' to exit.\n");
   socket.on('data', function(data) {
     console.log('got:', data.toString())
     if (data.trim().toLowerCase() === 'quit') {
       socket.write('Bye bye!');
       return socket.end();
     }
     //反饋回客戶端
     socket.write(data);
   });
   socket.on('end', function() {
     console.log('Client connection ended');
   });
 }).listen();

因為socket對象又是一個可讀的流,因此你能夠空氣他的pause()和resume(),或者你可以直接使用pipe()方法輸出一個可寫流:

 var ws = require('fs').createWriteStream('helloworld.txt');
 require('net').createServer(function(socket) {
   socket.pipe(ws);
 }).listen();

上面的代碼創(chuàng)建了一個可寫流對象,然后將這個可寫流對象輸出到客戶端。在客戶端可以得到一個名為helloworld.txt的文件,

可以用“telnet localhost 4001”來測試該例子。

因為socket對象同時具有可讀流的性質和可寫流的性質,因此上面的例子你可以反過來形成下面這樣的代碼:

 require('net').createServer(function(socket) {
   var rs = require('fs').createReadStream('hello.txt');
   rs.pipe(socket);
 }).listen();

上面的代碼將hello.text文件內容輸出到socket對象中返回給客戶端,當內容輸出完成后,tcp連接就會退出,在前面的文章中有說過Pipe的用法,默認情況下在數(shù)據(jù)讀取完成后就會執(zhí)行end方法,因此如果不想要這樣的效果并保持連接的話可以在pipe中添加第二個參數(shù):{ end : false },并重寫end監(jiān)聽。

2.閑置socket 當有閑置的socket出現(xiàn)的時候我們需要進行相應的清除的工作,由setTimeout方法可以幫我們把閑置的socket對象關閉。

 var timeout = ; // minute
 socket.setTimeout(timeout);
 socket.on('timeout', function() {
   socket.write('idle timeout, disconnecting, bye!');
   socket.end();
 });

下面是一個更簡潔的使用方式:

 socket.setTimeout(60000, function() {
   socket.end('idle timeout, disconnecting, bye!');
 });

3.保持連接

復制代碼 代碼如下:

socket.setKeepAlive(true);

你也可以添加第二個參數(shù)在設置可延時時長:

復制代碼 代碼如下:

socket.setKeepAlive(true, 10000); // 10 seconds

4.是否使用延時

kernel會在發(fā)送tcp數(shù)據(jù)包之前緩存數(shù)據(jù),因此會占據(jù)一定的延時,這對于某些小數(shù)據(jù)包場景來說是有用的,但如果你不希望有這樣的延時的話,那么你可以這樣設置:

復制代碼 代碼如下:

socket.setNoDelay(true);

 var port = ;
 var host = '...';
 server.listen(port, host);

listen方法的第二個參數(shù)是監(jiān)聽客戶端的ip地址,如果填寫則只監(jiān)聽所填寫的ip,否則則監(jiān)聽所有ip地址,默認情況下不填寫。 關閉服務器連接,我們可以使用close方法,同時也可以對該事件進行監(jiān)聽。

復制代碼 代碼如下:

 server.close();
 server.on('close', function() {
     console.log('server closed!');
 });

6.創(chuàng)建一個簡單的TCP聊天室服務器

var net = require('net');
 var server = net.createServer();
 var sockets = [];
 server.on('connection', function(socket) {
   console.log('got a new connection');
   sockets.push(socket);
   console.log('sockets length:', sockets.length);
   socket.on('data', function(data) {
     console.log('got data:', data.toString());
     sockets.forEach(function(otherSocket) {
       if (otherSocket !== socket) {
         otherSocket.write(data);
       }
     });
   });
   socket.on('close', function() {
     console.log('connection closed');
     var index = sockets.indexOf(socket);
     sockets.splice(index, );
     console.log('sockets length:', sockets.length);
   });
 });
 server.on('error', function(err) {
   console.log('Server error:', err.message);
 });
 server.on('close', function() {
   console.log('Server closed');
 });
 server.listen();

相關文章

  • phpnow重新安裝mysql數(shù)據(jù)庫的方法

    phpnow重新安裝mysql數(shù)據(jù)庫的方法

    這篇文章主要介紹了phpnow重新安裝mysql數(shù)據(jù)庫的方法,phpnow是一個本地PHP開發(fā)環(huán)境,簡單易用,需要的朋友可以參考下
    2014-05-05
  • CDN的加速緩存原理與回源機制解析

    CDN的加速緩存原理與回源機制解析

    CDN 是一個分布式的內容分發(fā)網(wǎng)絡,當用戶請求一個網(wǎng)絡資源時,用戶請求的是 CDN 提供的資源,和域名系統(tǒng)類似,當用戶請求一個資源時,首先會接觸到一個類似域名系統(tǒng)中目錄的服務,這個服務會告訴用戶究竟去哪個 IP 獲取這個資源,
    2023-09-09
  • 在mac上安裝虛擬機搭載Windows服務的方法

    在mac上安裝虛擬機搭載Windows服務的方法

    這篇文章主要介紹了在mac上安裝虛擬機搭載Windows服務的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • django項目、vue項目部署云服務器的詳細過程

    django項目、vue項目部署云服務器的詳細過程

    這篇文章主要介紹了django項目、vue項目部署云服務器的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • MongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢
    2013-07-07
  • HTTP與HTTP協(xié)作的Web服務器訪問流程圖解

    HTTP與HTTP協(xié)作的Web服務器訪問流程圖解

    記得以前剛接觸網(wǎng)站的時候,很奇怪一臺服務器上可以放很多個網(wǎng)站,不用的域名就可以訪問不同的目錄,今天看起來的理所當然以前真是不可思議,今天剛好看到了這篇文章就為大家分享一下
    2018-10-10
  • 微服務全景架構全面瓦解

    微服務全景架構全面瓦解

    這篇文章主要為大家詳細介紹了微服務全景架構的優(yōu)勢及核心組件,幫助大家更全面的了解并運用搭建微服務架構,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • 分享下自己總結的Git常用命令

    分享下自己總結的Git常用命令

    這篇文章主要為大家分享了自己的Git常用命令,需要的朋友可以參考下
    2014-09-09
  • KB967723造成MySQL頻繁無法連接

    KB967723造成MySQL頻繁無法連接

    最近一個客戶服務器的mysql頻繁提示連接不上,修改了MYSQL的最大連接數(shù)還是這樣,于是開始問萬能的搜索引擎大人!終于在微軟找到了解決方案!
    2009-11-11
  • Nodejs創(chuàng)建TCP服務器 - king0222

    Nodejs創(chuàng)建TCP服務器 - king0222

    這篇文章主要介紹了Nodejs創(chuàng)建TCP服務器 - king0222的相關資料,需要的朋友可以參考下
    2015-09-09

最新評論