私は読み書き可能なストリームの最近のRubyプロジェクトから、次の(簡体字)のコードを持っている:だから私は実行することができますノードJS TLS二重ストリーム
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の上に構築されているので、同じことができるはずです。
この私のセットアップこれまでのところ:それはhttps://nodejs.org/dist/latest-v6.x/docs/api/stream.html#stream_event_readablereadable
で右end
前に放出されると、データはこのケースでnull
です言うよう
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
を印刷します。提供会社はその話題を手助けすることはできません。彼らは理由を知っているだけです。私はそれがルビースニペットのように動作するように助けが必要です。
助けてください。コメントでの議論を通じて発見したよう
送信しているリクエストは有効ですか?何らかの「要求終了」マーカー(CRやLFなど)は必要ありませんか?直ちに、または遅れて、「可読」のイベントを受け取りますか?たとえば、 'openssl s_client'を使って"手で "同じリクエストを送信しようとしましたか? – jcaron
@jcaronルビースニペットのような全く同じ要求です。私は、ルビースニペットでxmlbuilderを使用しましたが、xmlstringも同様に動作します。ちょうどそれをチェックアウト。読み取り可能なイベントは、短い遅延(1-2秒)の後に発生します。それを手動で送信する。 – user1261284
'echo -e" <リクエストタイプ= 'ログイン'ユーザ= 'ユーザ'パスワード= 'パス'> "| openssl s_client -connect some.url.com:1234 -ign_eof'はすぐに開始されます。 – user1261284