2017-08-17 4 views
1

私はクロムプラグインと、ローカルでお互いに話しているデスクトップアプリケーションとの間にwebsocket接続を書いています。私はあなたが同じポートでリッスンする2つのソケットを持つことができないことを知っています(これはすべてのポートで当てはまりますか?)潜在的な(ウェブ)ソケットのポート衝突を扱う大きなアプリケーション

大多数のユーザーはポート衝突を起こさないでしょうが、コンピュータ;別のアプリケーションが既にポートを占有しているまれな状況で、そこに衝突があると合理的に期待できると思います。

大きなアプリケーションでこの潜在的な問題をどのように処理できますか?私はネットワーキングと(ウェブ)ソケットプログラミングにはよく慣れていません。私は推測

は、これらのようないくつかの非技術的な回避策があります。

  1. は、ユーザーがポートを設定してみましょうだけでなく、問題をログに記録し、それ
  2. とのサポート契約をしましょう

しかし、可能であれば、私はむしろそれに対処するための健全な技術的方法を持っています。いくつかの事前設定されたポートを試すいくつかのアルゴリズムを考え出すことができましたが、これは業界ではかなりよく知られている問題であり、この問題のコンセンサスが何であるかを知りたいと考えています。

質問は主にテクノロジーにとらわれませんが、重要なのは私のスタックがデスクトップ側にthis websockets libraryのPythonであり、もちろんクライアント側のJavaScriptです。

答えて

1

私はそれを考え直す理由はないと思います。一見、un occupiedフォールバックポートのリストと最後にポートを指定するためのプロンプトはうまくいくはずです。もし両方の当事者がHDD IO(私はどれくらいのクロムプラグインができるかわからない)があれば、プラグインとアプリが会うのがさらに簡単です。

同じホスト上の2つのアプリケーションの場合は、ループバックインターフェイスを追加することもできます。 Example

大規模なネットワークについては、サービス発見プロトコルという種類があり、この種の問題に対処することができます。基本的には、IPベースまたはUDPベースのマルチキャストプロトコルであり、ネットワーク上でさまざまなサービスをアドバタイズします。通常、これらのプロトコルは標準化された通信ポートを持っているので、別のアプリで占有される可能性は低いです。例はDHCP、Bonjourです。

ただし、ポートの競合を処理することは、主要な機能ではありません。大規模なネットワークでは、マシンは何らかの制御を受けるべきであり、ランダムなポートをつかむ多くのアプリケーションを持つべきではありません。サードパーティのアプリケーションで競合が発生した場合、理想的な解決策は、ポートを手動で設定できる設定を探すことです。

+0

クライアントとサーバの両方が知っている2つまたは3つの任意のオープンポートを定義するのが最善の選択肢です。それは簡単です。それにもかかわらず、港の紛争が起こったとしても、私はそれに対処するようサポートするつもりです。良い音:) – Azeirah

0

私は実際にどのように大きなアプリケーションがそれを行うのかわかりませんが、あなたが空いているポートを見つけるまで試すことができますか?

found_port = False 
ports = [port1, port2, port3 ....] 
for port in ports 
    try: 
     mySocket.bind ((ip_address, port)) 
     found_port = True 
    except: 
     pass 
    if found_port: 
     break 
+0

ここに若干の意味があります。クライアント側は、サーバー側がどのソケットを待機しようとしているのかを知る必要があります。私はネットワークプログラミングについて多くのことを知らないことを知っているので、私は明らかにこのような解決策を見つけるのを避けようとしています。 – Azeirah

+0

はいありがとうございます。私が答えにports_listを追加したことを説明するために、クライアントはポートリストを介して接続しようとする可能性もあります –

関連する問題