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

 
Renat Fatkhullin:

あなたはこの機能を理解していないし、使い方も知らない

この関数は入力バッファの 使用可能なバイト数を即座に表示し、ソケットが生きていることを知らせない。この関数は非常に重要で、同期待ち状態にならず、プログラムの制御を失うことなくデータを部分的に読み出すことができる。

また、TLS関数も正しい。TLS関数は、どのように、どのような順序で使うかを知っている訓練されたユーザーのために 用意されている。呼んで終わり」という人のためのものではないのだ。


それだけでなく、socketとtlsの関数は、ターミナルがraw/tls/https接続で使っているものと同じものだ。つまり、すべて問題なく動作する。これらの同じ実装は、私たちの高負荷ソリューションでも動作します。

生のネットワーク関数は初心者向けではないし、素朴な使い方でもない。ネットワークの相互作用の原理と特殊性を十分に理解する必要があります。また、TLSについて話すのであれば、ハンドシェーク処理の方法とシーケンスについてである。

この関数にはバッファ・パラメーターがない。 どのような入力バッファについて話しているのですか?
あなたがどのような理解で、どのようなユーザについて話しているのか分かりませんが、Ilyasはこの間違いを見つけ、それを間違いとしました。
ポイントは、すべてのユーザはソケットドキュメントの例に基づいているということです。

問題は、SocketIsReadable(socket) という関数が何を返すのかが明確でないことです。

Документация по MQL5: Сетевые функции / SocketIsReadable
Документация по MQL5: Сетевые функции / SocketIsReadable
  • www.mql5.com
SocketIsReadable - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky:

何か根拠があるのでしょうか?例えば、メッセージ長が256や1500の場合、マジックナンバーは何なのでしょうか?

根拠?わかりません。変数に数字を入れると、問題なく読み込まれます。長さは受信フレームのおおよその最大サイズに設定されています。
最大に設定しても何も影響はありません。

string CWs::Recv()
{
   uchar   rsp[]; //, res[];
   string  result  = "";
   //uint timeout_check = GetTickCount() + timeout;

   //を行う。
   //{
      uint len = 65536; /SocketIsReadable(ソケット);

      //if(len)
      //{
         int rsp_len = SocketTlsReadAvailable(socket, rsp, len);

         //if(rsp_len > 0)
         //{
            //ArrayInsert(res, rsp, ArraySize(res), 0); 
            //ブレーク;
         //} 
      //}
   //}
   //while(GetTickCount() < timeout_check && !IsStopped());

   if(rsp_len > 0) //(ArraySize(res) > 0)
      result = Unpack(rsp, ArraySize(rsp));
   
  
   return(result);
}

また、SocketIsReadable(socket)関数を 使えば、エラーで読み込まれることがわかります。

SocketIsReadable(socket) が len で返す値はSocketTlsRead() や SocketTlsReadAvailable() には収まらない。

Документация по MQL5: Сетевые функции / SocketIsReadable
Документация по MQL5: Сетевые функции / SocketIsReadable
  • www.mql5.com
SocketIsReadable - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

この関数にはバッファパラメータがありません。 どのような入力バッファについて話しているのでしょうか?
あなたがどのような理解で、どのようなユーザについて話しているのかわかりません。このエラーはIlyasが見つけたもので、彼はそれを間違いと受け取ったのだと思います。
ポイントは、すべてのユーザがソケットに関するドキュメントの例を指向しているということです。
そして上級者はプロトコルの仕様を書き、アップグレードやフレームの解析はこれらすべてを理解する。
問題は、関数SocketIsReadable(socket)がwss: frameに対して何を返すのかが明確でないことだ。

つまり、あなたはソケットとそのバッファについて全くわかっていないのに、私たちにエラーを教えているのです。

SocketIsReadableは、受信バッファ内の生データのサイズをチェックし、より小さなサイズで受信した暗号化されたデータを扱うTls関数とは確かに適合しません。

ミスだと思った」-人はどんなきちんとした答えでも、罪を認めたと受け取るものだ。明確な答えを示してください。
 
Renat Fatkhullin:
ソケットとそのバッファについてまったく知らないくせに、間違いを教えてくれるわけだ。

SocketIsReadableが受信バッファ内の生データのサイズをチェックすることは、より小さいサイズで受信された暗号化されたデータを扱うTls関数とは確かに合わない。


SocketIsReadible 関数のバッファについて書かれていますが、ユーザが利用できないのであれば言及するのはおかしいです。

 
記事を読み、提案されたコードを見てください。

複雑なプロトコルの実装品質について話しているときに、数行の再現不可能なコードでエラーを主張するのはおかしい。

 
Roman:


あなたはSocketIsReadible 関数のバッファについて書いていますが、ユーザーが利用できないのであれば、それに言及するのはおかしいです。

もう一度言いますが、あなたはソケットを理解しておらず、その特殊性を知らないのです。

あなたは、存在しない「内部」SocketIsReadable バッファについてさえ誤解している。ソケット内のバッファは誰のものか?誰が管理しているのか?それらはどのように機能し、どのような特徴があるのか?

それゆえ、現実が素朴な認識と乖離している場合に、エラー文で誤用するのである。



 
Renat Fatkhullin:

間違いのために取られた」-人はどんなきちんとした答えでも、罪を認めたと勘違いするものだ。明確な答えを示せ。

.
イル

r

イル1

 
Roman:

.


彼の答えの最初の部分は正しく、生データと復号化されたデータのサイズの違いを説明している。

しかし、最後の答えは、松葉杖の形をした私的なケース(修正サイズを置く)である。それはおそらく、別の3行のコードを背景にしたものであり、私的な修正/松葉杖を提供する以外にない。

イリヤスはソケットを扱わない。エラー通知もない。

参考までに:私はMT5で生のソケット、tls、https、およびそれらの派生機能の実装を書いた。以前のように、私は1995年以来、何十ものネットワーク・プロトコルの 実装を書いた。

だから、私に反論するのはおかしい。何千万台ものデバイスが私の実装で動作しているのだ。
 
Renat Fatkhullin:
彼の答えの最初の部分は正しく、生データと復号化されたデータのサイズの違いを説明している。

しかし最後の答えは、松葉杖の形をした私的なケース(サイズを修正する)である。おそらくは、別の3行のコードを背景にしたもので、私的な修正/松葉杖を提供する以外にないのだろう。

イリヤスはソケットを扱わない。エラーの確認もない。

参考までに:私はMT5でrawソケット、tls、httpsとその派生型の実装を書いた。以前と同様、私は1995年以来、何十ものネットワーク・プロトコルの実装を書いた。

だから、私に反論するのはおかしい。何千万台ものデバイスが私の実装で動き、動作しているのだ。

私はあなたの議論の余地のない経験を理解しています。そして、誰もあなたと議論するつもりはありませんでした。
しかし、記事はMQLでwss:を正しく使用する方法の問題を明らかにしていません!
なぜなら、記事の著者は、他のすべての(上級者であっても)ユーザーと同様に、この点を理解していないからです。
だからこそ、私は私の実装で、松葉杖としてフィックスサイズを使用しています。

SocketIsReadable プールを考慮した、MQLでの正しいwss:フレーム読み取りを示してください。

 
Roman:

私はあなたの議論の余地のない経験を理解している。そして誰もあなたに反論するつもりはなかった。
しかし、この記事はMQLでwss:をどのように正しく使うかという問題を明らかにしていない!
なぜなら、この記事の著者はこの点を他の(上級者であっても)すべてのユーザーと同様に理解していないからだ。
だからこそ、私の実装では修正サイズを松葉杖として使っている。

SocketIsReadable プールを考慮した、MQLでの正しいwss:フレーム読み取りを示してください。

今は時間がないが、MQL5の標準ライブラリで CSocketRaw、CSocketTLS、CSocketHTTPの実装一式を作るべきだ。

8時間くらい時間があったらやってみよう。