這個對象是對TCP 或者UNIX SOCKET 的抽象,它實現(xiàn)了全雙工的流接口。net.Stream 可以由用戶手動建立, 并且作為一個客戶端來使用(和connect()),也可以被node 建立并通過服務(wù)器的'connection'事件傳遞給用戶。(譯 注:如http.Server 的connection 事件,會將net.Stream 的實例當作參數(shù)傳遞給響應(yīng)函數(shù)) net.Stream 實例會發(fā)出下列事件:
Event: 'connect'
function () { }
當成功建立連接后觸發(fā)此事件事件。詳見connect()。
Event: 'secure'
function () { }
當一個stream 與其對等端安全建立一個SSL 握手后觸發(fā)。
Event: 'data'
function (data) { }
當接收到數(shù)據(jù)時觸發(fā)該事件,數(shù)據(jù)會是Buffer 或者String,數(shù)據(jù)的編碼通過stream.setEncoding()來設(shè)計(查看可 讀流那部分文章來獲得更多信息)。
Event: 'end'
function () { }
當stream 發(fā)出一個FIN 包后觸發(fā)此事件。這個事件發(fā)出后準備狀態(tài)會變?yōu)椤粚憽?writeOnly)。當這個事件被發(fā)出 后,唯一能做的事情或許只是call stream.end()了。
Event: 'timeout'
function () { }
當流因為不活動而超時時觸發(fā)這個事件。這是唯一一個因為stream 空閑而通知的事件,這個時候用戶必須手動 關(guān)閉這個連接。 參見:stream.setTimeout()
Event: 'drain'
function () { }
當寫緩沖區(qū)變空的時候觸發(fā)這個事件,這個事件可以用來控制/調(diào)節(jié)上傳。
Event: 'error' function (exception) { } 當發(fā)生一個錯誤時候觸發(fā)?!甤lose’事件將跟隨這個事件被發(fā)出。 Event: 'close'
function (had_error) { }
當stream 被完全關(guān)閉時發(fā)出這個事件。參數(shù)had_error 是一個用來標示stream 關(guān)閉是否是因為傳輸錯誤所導(dǎo)致 的標志。
net.createConnection(port, host='127.0.0.1')
構(gòu)造一個新的stream 對象并且打開一個stream 到指定的端口和主機,如果第二個參數(shù)沒有寫,則假設(shè)主機為 localhost
建立連接后觸發(fā)connect 事件。
stream.connect(port, host='127.0.0.1')
在指定端口和主機打開一個stream。createConnection()也可以建立連接,所以通常我們并不需要使用這個方法。 只有在一個stream 被關(guān)閉,并且你希望重新使用這個對象連接到其他主機的時候我們才用這個方法。
這個函數(shù)是異步的。在連接建立之后會觸發(fā)‘connect’事件。如果在連接過程中產(chǎn)生問題,將產(chǎn)生'error'事件,而 不會被觸發(fā)'connect'。
stream.remoteAddress
這個字符串代表遠程計算機的IP 地址,例如'74.125.127.100' 或者'2001:4860:a005::68'。 這個成員變量只存在于服務(wù)器端連接。
stream.readyState
stream.readyState 可以是'closed', 'open', 'opening', 'readOnly' 'writeOnly' 中的一個。
stream.setEncoding(encoding='null')
為接受到的數(shù)據(jù)設(shè)置編碼格式(只能'ascii', 'utf8', 'base64'中的一個)。
stream.setSecure([credentials])
配合crypto 模塊提供的私鑰和證書(在peer authentication 中是CA 證書),此方法可以為stream 提供https 支持。
如果credentials 包含一個或多個數(shù)字認證中心證書(CA certificates),則stream 將請求對等待方提交一個客戶端 證書作為HTTPS 連接握手的一部分,證書的合法性及內(nèi)容可以通過verifyPeer()及getPeerCertificate 來查看。
stream.verifyPeer()
根據(jù)被信任的證書列表或?qū)Ψ竭B接證書上下文的驗證結(jié)果返回true 或false。
stream.getPeerCertificate()
返回用JSON 結(jié)構(gòu)詳盡表述的對等方證書,其中包含一個證書的‘主題’,‘發(fā)布者’,'有效來源','有效目標'。
stream.write(data, encoding='ascii')
通過stream 發(fā)送數(shù)據(jù),第二個參數(shù)指定這個字符串實例的編碼,缺省為ASCII,因為實用UTF8編碼比較慢。
如果全部數(shù)據(jù)安全寫入內(nèi)核緩沖區(qū)則返回true,如果全部或者部分數(shù)據(jù)仍然在用戶空間排隊則返回false, 當緩 沖區(qū)再次空閑的時候'drain'事件會被觸發(fā)。
stream.end([data], [encoding]) 半關(guān)閉stream,也就是說,steram 發(fā)出一個FIN 包。這個時候可能服務(wù)器還會發(fā)出一些數(shù)據(jù)。當call 這個函數(shù) 后,readyState 會變成'readOnly'。 如果使用了data 這個參數(shù), 這就相當于call stream.write(data, encoding), 其次后面跟隨著 stream.end().stream.destroy() 請確保在這個stream 上沒有任何I/O 活動。只有在錯誤發(fā)生的時候(為了調(diào)試錯誤)才需要調(diào)用此函數(shù)。
stream.pause()
暫停數(shù)據(jù)的讀取.更確切的說,'data'事件將不會被發(fā)出,這個方法在控制上傳的時候非常有用。
stream.resume()
當恢復(fù)讀取數(shù)據(jù)。
stream.setTimeout(timeout)
設(shè)置timeout 這么多毫秒作為stream 的超時時間,默認情況下net.Stream 沒有超時時間。 當超時事件被觸發(fā),stream 將受到一個‘timeout’事件,但是連接將不會被斷掉,用戶必須執(zhí)行end()或者destroy 來結(jié)束這個stream。
如果timeout 為0,會禁用超時。
stream.setNoDelay(noDelay=true)
禁止Nagle algorithm(Nagle 運算模式被設(shè)計用來減少LAN 和其它網(wǎng)絡(luò)擁塞),缺省情況下TCP 連接使用Nagle algorithm,此模式會在真正將數(shù)據(jù)發(fā)出前將其緩沖起來。設(shè)置noDelay 將在每次call stream.write()時立刻將數(shù)據(jù) 連續(xù)發(fā)出。
stream.setKeepAlive(enable=false, [initialDelay])
允許/禁止keep-alive 功能,在一個空閑stream 首次收到keepalive 之前可以設(shè)置killalive 的延時。設(shè)置 initialDelay(毫秒)變量將設(shè)置接收到最后的數(shù)據(jù)包和首次keepalive 探測之間的時差。設(shè)置為0則保持缺省(或者 上一次的)設(shè)置的數(shù)值不變。
更多建議: