問題タブ [nonblocking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java ServerSocket でのブロックを回避するにはどうすればよいですか?
2種類のデータ(ポート80とポート81)を2つのポートでリッスンする必要があるソケットリスナーに取り組んでいます。これらのデータは、データに対して実行される操作の種類と非常に似ていますが、異なるポートに到達するため、単に異なります。私は先に進み、Java の ServerSocket クラスを使用して実装をコーディングしましたが、後で ServerSocket クラスの accept() メソッドがブロックであり、私の実装ではそれができないことに気付きました。だから今、私は Java NIO を使用して同じことを実装することを考えていましたが、いくつかのチュートリアルを行った後、私が始めた方法よりも混乱していると思います。ここの誰かが、疑似コードや技術的な「次に何をすべきか」であっても、プロセス全体を順を追って説明してくれるとうれしいです。これが私が達成しようと計画していることです。
2つの同様のスレッドを呼び出すことにより、2つのポートでこれまでと同じようにリッスンします。(非ブロッキング) あるネットワークロケーションからのリモートデバイスが接続し、データを送信してから切断します。
NIO を使用して、localhost のポート 80 などのポートでリッスンするようにサーバーをセットアップする方法についての知識だけが得られれば、残りはすべて非常に簡単に実装できると思います。
乾杯
c - ソケットをブロック モードにリセットする方法 (非ブロック モードに設定した後)。
ソケットをノンブロッキングモードに設定することに関してこれを読みました。
http://www.gnu.org/software/libc/manual/html_mono/libc.html#File-Status-Flags
これが私がしたことです:
ソケットをブロッキング モードに戻すにはどうすればよいですか? O_BLOCK フラグが表示されませんか?
ありがとうございました。
java - NIO: メッセージを送信してすぐに切断する
状況によっては、非ブロッキング I/O ( ) を使用してサーバーからクライアントにエラー メッセージを送信し、クライアントをSocketChannel.write(ByteBuffer)
切断したいと考えています。メッセージの完全な内容を書き込んですぐに切断すると仮定すると、この時点で OS が実際にデータを送信していないと推測しているため、クライアントはこのメッセージを受信しない可能性があると推測されます。
これは正しいですか? もしそうなら、この状況に対処するための推奨されるアプローチはありますか?
クライアントを切断したい場合はメッセージを送信し、1〜2秒後に接続を閉じるタイマーを使用することを考えていました。
opengl - VSync=on のノンブロッキング SwapBuffers()
VSync が有効になっている場合でも、ノンブロッキング SwapBuffers() を作成するポータブルな方法を探しています。
つまり、イベントで通知したり、次の VSync までの遅延を知ることは可能ですか?
vb.net - シンプルで邪魔にならない睡眠方法は?
私はこれをグーグルで検索し、ここでいくつかのスレッドを読みましたが、VB.Netアプリケーションをしばらくスリープさせ、アプリケーションの応答性を維持する簡単な方法を見つけられませんでした:
VB.Net アプリケーションを数秒間待機させる単純で非ブロッキングのソリューションは本当にないのでしょうか?
ありがとうございました。
sockets - CでのノンブロッキングUDPソケットプログラミング:何が得られますか?
非blockigUDPソケットからrecv()/ recvfrom()が何を返すかを理解するのに問題があります。
TCPと比較してもう少し具体的です(私が間違っている場合は訂正してください):
ブロッキングソケット(TCPまたはUDP)は、バッファにデータが存在するまで、recv()から戻りません。これは、バイト数(TCP)または完全なデータグラム(UDP)である可能性があります。
非ブロッキングTCPソケットは、EWOULDBLOCK(linux)/ WSAEWOULDBLOCK(windows)または現在バッファーにあるバイトのいずれかを返します。TCPデータはストリームであるため、返されるバイト数は関係ありません。
今の質問:
- 利用可能なデータがない場合、非ブロッキングUDPソケットはWOULDBLOCK(linux)/ WSAEWOULDBLOCK(windows)も返します。しかし、利用可能なデータがある場合、非ブロッキングUDPソケットはほんの数バイトを返しますか?つまり、データグラムの半分しか取得できないのでしょうか、それともUDPソケットは常に完全なデータグラムを返すのでしょうか?
編集:
「データグラムの半分」とは、ソケットが現在データグラムを受信している瞬間にrecv()を呼び出すとどうなるかということです。その瞬間、バッファにいくつかのバイトがありますが、データグラムはまだ完成していません。
説明やコメントをいただければ幸いです。ありがとう!
mysql - Django アプリケーションで非同期/並列データベース クエリを実行することは可能ですか?
必要なデータをすべて取得するために、10 ~ 20 回のデータベース クエリを実行する Web ページがあります。
通常、クエリが送信された後、Django スレッド/プロセスは結果が返されるのを待ってブロックされ、次のクエリに到達するまで実行を再開します。
データベース サーバーで並列に処理できるように、すべてのクエリを非同期に発行する方法はありますか?
MySQL を使用していますが、他のデータベースのソリューションについても知りたいです。たとえば、Postgresql には非同期クライアント ライブラリがあると聞きましたが、この場合はどのように使用すればよいでしょうか?
c++ - 非同期ソケット サーバーとクライアントを動作させる (C で記述)
これらのコードで私を助けてもらえますか?クライアントとサーバーが非同期で通信できるようにしようとしています。クライアントとサーバーの両方がお互いを待たないことを意味します (たとえば、サーバーまたはクライアントが recvfrom() から読み取り、データが存在しない場合、最後に受信したものを取得します (私が名前を付けたのはバックアップです)。コードは次のとおりです。
クライアント
サーバー...
コードはコンパイルされ、問題なくリンクされますが、相互にデータを交換しません。なぜですか? ……どこかに問題があるのでしょうか?
返信ありがとうございます。
PS:コードは削除されました...
c - キーボード入力時に無限ループ停止中に行う - C
すべてのサイクルを続行するように要求せずに、キーボードからのユーザー入力でのみ停止する無限サイクルを実行する方法はありますか? Cプログラムで(for(;;)
ループでエントリを読み取るCチャットを開発しています。ユーザーがメッセージを入力して送信したい場合にのみ停止する必要があります)こんにちは!
c++ - C ++同時連想コンテナ?
同じ要素の読み取りと書き込みを同時に行わないという条件で、安全な同時読み取りおよび書き込みアクセスを提供する、ある種の連想コンテナを探しています。
基本的に私はこの設定をしています:
スレッド1: Aを作成し、Aをコンテナーに書き込み、ネットワーク経由でAを送信します。
スレッド2: Aへの応答を受信し、コンテナーからAを読み取り、いくつかの処理を実行します。
シリアルに処理されるAに対して複数の応答を受け取る可能性がありますが、Aを1回だけ書き込むことを保証できます。これはまた、Aへの応答を送信した後にのみ受信できるため、Aの読み取りと書き込みを同時に行わないことを保証します。
つまり、基本的に、要素への書き込みが他の要素と混同しないコンテナを探しています。たとえば、std::map
(または他のツリーベースの実装)は、基礎となる実装が赤黒木であるため、この条件を満たしていません。そのため、特定の書き込みによってツリーのバランスが再調整され、同時読み取り操作が失敗する可能性があります。
通常のハッシュテーブルの実装が私の基準を満たすという私の仮定に基づいて、これでうまくいくと思いますがstd::hash_map
、boost::unordered_set
私は肯定的ではなく、私に教えてくれるドキュメントを見つけることができません。他の誰かがこれらを同様に使用しようとしましたか?