2016-06-30 20 views
0

私のサーバーは着信接続のためにポート1234をリッスンしています。ソケットの配列を作成しました。その配列をループして、すでに空いているソケット(Closed = 0)ソケット配列で使用可能な空きソケットがない場合は、新しい着信ソケットを保持する配列。これは後で各接続のみを識別するソケットのインデックスになります。それが良いアプローチであるかどうかは分かりませんが、同時に開かれた約15人のクライアントが私のサーバーにストレスを加えようとするまで、正常に動作し、安定しています。私が直面している問題は、クライアントアプリケーションの中に接続タイムアウトが発生し、同時に複数の接続を処理するサーバーが不安定になることです。私は多くのデータをサーバーから受信した各接続イベントで20バイトしか送信しません。私はバックログの値を増やそうとしましたを聴いていますが、それでも役に立たなかった。 私はそれらのクライアントが接続するのに時間がかかります。しかし、彼らは結局結ぶ。また、サーバーは新しい接続に後で応答します(たとえば、それらのクライアントアプリケーションをすべて閉じるか、新しいクライアントアプリケーションを開くとすぐに接続します)。また、これらの接続は開いたままで、私はクライアント側からソケットを閉じません。複数の接続が同時に発生したときにパフォーマンスの問題があり、なぜ私はCSocketPlusクラス同時にWinsock 15の接続が不安定になる

接続要求イベント

Private Sub Sockets_ConnectionRequest(ByVal Index As Variant, ByVal requestID As Long) 
Dim sckIndex As Integer 

sckIndex = GetFreeSocketIndex(Sockets) 
Sockets.Accept sckIndex, requestID 
End Sub 


Function GetFreeSocketIndex(Sockets As CSocketPlus) As Integer 
Dim i As Integer, blnFound As Boolean 
If Sockets.ArrayCount = 1 Then 'First we check if we have not loaded any arrays yet (First connector) 
Sockets.ArrayAdd 1 
GetFreeSocketIndex = 1 
ReDim UserInfo(1) 
Exit Function 

Else 
'Else we loop through all arrays and find a free (Not connected one) 

For i = 1 To Sockets.ArrayCount - 1 

If Sockets.State(i) <> sckConnected Then 
'Found one use it 
blnFound = True 
Sockets.CloseSck i 

GetFreeSocketIndex = i 
If UBound(UserInfo) < i Then 
    ReDim Preserve UserInfo(i) 
End If 
Exit Function 
    End If 

Next i 

'Didn't find any load one and use it 
    If blnFound = False Then 
    Sockets.ArrayAdd i 
    Sockets.CloseSck i 
    GetFreeSocketIndex = i 
    ReDim Preserve UserInfo(i) 

    End If 
    End If 




End Function 

を使用しています

誰でも知っていますか?なぜサーバーは応答が遅くなるのですか?

何がサーバをより早く受け入れるのですか?

私は接続を受け入れないようにしようとしました。つまり、接続要求イベントで受け入れを呼び出すのではなく、同じ問題です。

編集:私はのCSocketクラスのFD_ACCEPTイベントにソケット番号の出力を印刷するには、デバッグ変数を置くことを試みたが、のWndProcをした場合にメッセージを投稿するために遅らせているようです多くの接続。

答えて

0

私の接続から問題があるようです。 250MbpsのRDPにサーバーを移動しました。200Mbpsのアップロード速度でダウンロード速度が速く、うまく動作しているようです。 100台のクライアントと接続し、すべてのクライアントが即時に接続されていることをテストしました。なぜ私は私の家の接続が40/40 Mbpsのような問題を持っているのだろうか...うーん。それがなぜ起こるのか誰も知っていますか?

編集:ルーターオプションと思われます!

のDoS保護

無効(単にテスト目的のために)、ファイアウォールの有効化ファイアウォール
を有効にして、すべてが完璧に動作します!

したがって、ルーターは基本的にいくつかの種類のDOS攻撃があると考えています。 トラフィックが遅くなります。

関連する問題