ソケットとSocketChannelの比較
2023-10-18 10:58:25
疑問点
私は、以下のことを理解しようとしています。 ソケットチャンネル と NIO を一般的に使用することができます。私は、通常のソケットで作業する方法と、(通常のブロッキングソケットを使用して)クライアントごとの簡単なスレッドサーバーを作成する方法を知っています。
だから私の質問。
- SocketChannelとは何ですか?
- Socketの代わりにSocketChannelを使用する場合、どのような利点がありますか。
- チャネルとバッファの関係はどうなっていますか。
- セレクタとは何ですか?
-
の最初のセンテンスは
ドキュメント
は
A selectable channel for stream-oriented connecting sockets.
. というのはどういう意味でしょうか?
を読みました。 このドキュメント を読みましたが、どういうわけか理解できません...。
どのように解決するのですか?
A
Socket
はブロッキング入出力デバイスです。これによって
Thread
を読み込み時にブロックさせ、バッファが一杯になると書き込み時にもブロックさせる可能性があります。そのため、もしサーバーにたくさんのオープンな
Socket
s.
A
SocketChannel
はソケットから読み込むためのノンブロッキングな方法で、 1つのスレッドが一度にたくさんのオープンなコネクションと通信できるようにします。この機能は
SocketChannel
を
Selector
に変換し、セレクタの
select()
メソッドをループさせ、ソケットが受け入れられたり、データを受け取ったり、 あるいは閉じたりした場合にそれを通知することができます。これにより、1つのスレッドで複数のクライアントと通信でき、複数のスレッドや同期のオーバーヘッドが発生することはありません。
Buffer
はNIOのもう一つの機能で、読み取りと書き込みから基礎データにアクセスし、データを新しい配列にコピーするオーバーヘッドを回避することができます。
関連
-
Javaでよくある構文エラー
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
Jsoup-Crawlingの動作
-
SocketException java.netの4つの例外解決策。
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
switch case文のcaseの後の列挙定数は列挙型なし
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
Javaジェネリックを1つの記事で
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
maven レポート エラー 解決不可能な親POM
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
アクセス制限の解決方法: ---- in Java
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。