gpt4 book ai didi

node.js - Node js TLS 双工流

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:15 25 4
gpt4 key购买 nike

我有来自最近的 ruby​​ 项目的以下(简化的)代码,用于可读和可写流:

class StreamReader
require 'socket'
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
def initialize
tcp_client = TCPSocket.new ENV['URL'], ENV['PORT']
context = OpenSSL::SSL::SSLContext.new
context.ssl_version = :TLSv1_2
context.verify_mode = OpenSSL::SSL::VERIFY_PEER
cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths
context.cert_store = cert_store
@stream_client = OpenSSL::SSL::SSLSocket.new tcp_client, context
@stream_client.connect
@requester = StreamRequester.new
end

def open_stream
login = @requester.create_login_request
@stream_client.puts login
loop do
line = @live_client.gets
puts line.strip if !line.strip.empty?
end
end
end

这样我就可以运行:

stream = StreamReader.new
stream.open_stream

它会打印出数据。

现在我尝试使用 nodejs 6.4.0 打开提要,但我无法理解它。

我认为我需要一个 net.Socket ,然后将其传递给 tls.TLSSocket ,它将返回一个双工流。但我不知道如何设置它。 TLS 构建在 OpenSSL 之上,因此它应该能够执行相同的操作。

这是我到目前为止的设置:

var net = require('net');
var tls = require('tls');
var HOST = 'some.url.com';
var PORT = 1234;

var loginRequest = "<Request type='login' user='user' password='pass'></Request>"

//create net.Socket
var socket = new net.Socket();
socket.connect({port: PORT, host: HOST})

var tlsSocket = new tls.TLSSocket(socket,{requestCert:false})
tlsSocket.setEncoding("UTF-8")
//Listen for connect
socket.on("connect",function(){
console.log("connected to",HOST)
tlsSocket.write(loginRequest,function (){
console.log("request sent")
})
})
tlsSocket.on("error",function(err){
console.log("ERROR:",err)
})

tlsSocket.on("close",function(){
console.log("CLOSING")
})

tlsSocket.on("end",function(){
console.log("END")
})

tlsSocket.on("data",function(data){
console.log("DATA:",data)
})

tlsSocket.on("readable",function(){
console.log("SOMETHING TO READ")
console.log(tlsSocket.read())
})

打印

connected to some.url.com
request sent
SOMETHING TO READ
null
END
CLOSING

正如https://nodejs.org/dist/latest-v6.x/docs/api/stream.html#stream_event_readable中所述readend 之前发出,在这种情况下数据为 null。提供公司无法就该主题提供帮助,只有他们知道原因。我需要帮助才能使其像 ruby 片段中那样工作。

任何帮助表示赞赏。

最佳答案

通过评论中的讨论发现:

  • 问题是服务器需要一个分隔符来找到发送的请求的结尾并开始处理它。

  • 在发送的请求末尾添加 \n 可解决该问题。

关于node.js - Node js TLS 双工流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com