記事についてのディスカッション - ページ 4

 
Denis Kirichenko # :

だから約束の3年が待っている...。あと1年待つしかないのだ )))

おそらく :)))

 
MetaQuotes:

新しい記事Websockets for MetaTrader 5 が掲載されました:

著者フランシス・デュベ

素晴らしい!では、どのように継続フレームを解析するのですか?今のところ、最初のレスポンスにあるフレームしか解析できません。私はnodejsのwebsocketを使っています。
 

こんにちは

私はnodejs/nestjsで私のWebソケットサーバで動作するようにあなたのライブラリを実装しました。私が直面している問題は、私のサーバーでローカルにソケットを使用しているとき、すべてが正常に動作することです。

しかし、私のnestjsアプリをdigitaloceanの app-platformにデプロイするとすぐに状況が変わり、最初はmql5ソケットをサーバーに接続できませんでしたが、その後接続できるようになりました。

ソケットのステータスは常に "CONNECTING "に設定されているため、接続に成功した後は何もできません。しかし、connectメソッドを呼び出した後、"sendString " メソッドを使ってデータをサーバーに送ると、データは配信される。

Webソケットが動作しているかどうかを確認するために拡張機能を試したところ、問題なく動作していることがわかりました。

この問題に関して、何か手がかりや指針があれば、とてもありがたいです。

追記: mql5のEAでは今のところ派手なことはしていません。記事の接続ガイドに従ってサーバーと接続しているだけです。それ以外は何もしていません!:(

 

whileループ内でm_socket.Read(...)を複数回呼び出すシナリオでは、WebsocketClient.fillRxBufferにバグがあることに注意して ください。

m_socket.Read(...) は配列の末尾にデータを追加するのではなく、配列の先頭にデータを書き込みます。

私の場合、テストのためにローカルのウェブソケットに接続していたのですが、m_socket.Read(...) の 最初の呼び出しが1バイトだけをフェッチし、m_socket.Read(...) の2回目のループが残りをフェッチしている ことがわかりました。
また、バッファにデータを入れる前に m_rxbuf が空であることを確認する必要があります。バッファはフレームを解析した後にクリアされますが、念のため、fillRxBufferを呼び出すたびにクリアすることにしました。

また、読み込むデータがなくなったらm_socket.Read(...)の ループを止めるようにした。理想的には、フレームをパースするのに十分なデータがあるまで読み続けるべきだと思いますが、それにはコードを少し再構築する必要があります。

この記事には感謝している。今のところ、僕が探していたものに最も近い解決策を見つけることができた。最終的には、独自のウェブ・ソケット・ライブラリを作るかもしれない。

 
https://www.mql5.com/en/book

この本では、ネイティブのウェブソケットについて説明しています。

楽しむ
 
Soewono Effendi #:
https:// www.mql5.com/en/book

ネイティブのウェブソケットについては、以下の本を参照してください。

楽しむ

あなたはウェブソケットを通常のネットワークソケットや通常のHTTPウェブリクエストと 混同しているのではないでしょうか。ウェブ・ソケットは、通常のHTTPリクエストの上にカスタム・コーディングを行う必要があります。私はこの記事に基づいて、いくつかのプロジェクト特有の修正を加えながら、なんとかソリューションを動作させることができました。

 
Shane Leigh Kingston #:

ウェブ・ソケットと通常のネットワーク・ソケットや通常のHTTPウェブ・リクエストを 混同しているのではないでしょうか。ウェブ・ソケットは、通常のHTTPリクエストの上にカスタム・コーディングを行う必要があります。私はこの記事に基づいて、プロジェクト特有の修正を加えて何とか解決策を得ました。


もしあなたがこの本を読みたくないなら、それはあなたの損失であって、私の損失ではありません。)

 
Shane Leigh Kingston #:

WebsocketClient.fillRxBuffer には、while ループ内で m_socket.Read(...) を複数回呼び出す場合にバグがあることに注意して ください。

m_socket.Read(...) は配列の末尾にデータを追加するのではなく、配列の先頭にデータを書き込みます。

私の場合、テストのためにローカルのウェブソケットに接続していたのですが、m_socket.Read(...) の 最初の呼び出しが1バイトだけをフェッチし、m_socket.Read(...) の2回目のループが残りをフェッチしている ことがわかりました。
また、バッファにデータを入れる前に m_rxbuf が空であることを確認する必要があります。バッファはフレームを解析した後にクリアされますが、念のため、fillRxBufferを呼び出すたびにクリアすることにしました。

また、読み込むデータがなくなったらm_socket.Read(...)の ループを止めるようにした。理想的には、フレームを解析するのに十分なデータがあるまで読み続けるべきだと思いますが、そのためにはコードを少し再構築する必要があります。

この記事には感謝している。今のところ、僕が探していたものに最も近い解決策を見つけることができた。最終的には、独自のウェブ・ソケット・ライブラリを作るかもしれない。

Shane Leigh Kingstonさん、これは古い投稿ですが、mql5でウェブソケットを実装する方法が必要で、このライブラリがそれに比較的近い唯一のもののようです。しかし、私はこの分野の専門家ではありません。どうすればうまくいくのかご指導ください。

ありがとうございます。
 
pauldic #:
これは古い投稿ですが、mql5でwebsocketを実装する方法が必要で、このライブラリがそれに比較的近い唯一のもののようです。しかし、私はこの分野の専門家ではありません。どうすればうまくいくのかご指導ください。 。

algotradingの 本にwebsocketsの別の実装があります。

フォーラムでのディスカッションで、実際のバージョンのソースコードが見つかるかもしれません:

MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5
  • www.mql5.com
We have previously looked at Theoretical foundations of the WebSockets protocol . The complete specification is quite extensive, and a detailed...
 
Stanislav Korotky #:

algotradingの本には、ウェブソケットの別の実装がある。

実際のソースコードのバージョンは、フォーラムのディスカッションで見つけることができます:


はい、@Stanislav 私は昨日それを見つけました。