簡體   English   中英

嘗試使用 Ruby 向 ctrader 服務器發送 FIX api 消息但未收到響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM