![](/img/trans.png)
[英]how to send message using Gmail API with Ruby Google API Client?
[英]Trying to send a FIX api message to ctrader server using Ruby but receiving no response
嘗試查看是否可以從 ctrader 服務器獲得響應。
沒有得到回應,似乎掛在“s.recv(1024)”。 所以不確定這里可能出了什么問題。
我對 sockets 和網絡編碼的經驗有限。
我檢查了我的登錄憑據,一切似乎都很好。
注意:我知道有許多 FIX 引擎可用於此目的,但我想自己嘗試一下。
ctrader FIX 指南
require 'socket'
hostname = "h51.p.ctrader.com"
port = 5201
#constructing a fix message to see what ctrader server returns
#8=FIX.4.4|9=123|35=A|49=demo.ctrader.*******|56=cServer|57=QUOTE|50=QUOTE|34=1|52=20220127-16:49:31|98=0|108=30|553=********|554=*******|10=155|
fix_message = "8=FIX.4.4|9=#{bodylengthsum}|" + bodylength + "10=#{checksumcalc}|"
s = TCPSocket.new(hostname, port)
s.send(fix_message.force_encoding("ASCII"),0)
print fix_message
puts s.recv(1024)
s.close
Sockets 默認在讀取時阻塞。 當您請求 1024 字節時,調用將阻塞,直到接收到該數量的數據。 如果發件人沒有向您發送 1024 字節,則調用將永遠阻塞。
為了不阻塞,您需要另一種策略來從套接字讀取。 FIX 協議在每條消息的開頭給出 msg 長度。 所以你需要讀一段很短的內容,然后解析 msg 長度,然后准確地讀取那個數量。 這樣你就不會阻塞等待永遠不會到達的數據。
sockets還有另一種策略,稱為非阻塞模式。 這是一個復雜的主題,您需要研究,但通常在您不想阻止並需要閱讀任意長度的消息時使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.