我必須通過UDP協議查詢〜10000個遊戲服務器,以檢查它們是否每隔15分鐘在服務器上聯機。我的代碼正在工作,但離線阻塞線程的服務器極大地減慢了進度。我使用了20個線程,更多的會導致Python的UDP套接字慢下來爬行。什麼是檢查服務器是否在線的合理超時時間?
目前我在決定服務器處於脫機狀態之前使用了5秒的超時時間。這個限制是否可以進一步降低,還是必須升高?
請不要建議使用的心跳,我的服務器來進行遊戲,其中有水蛭並沒有收到最心跳的非官方masterserver。
我必須通過UDP協議查詢〜10000個遊戲服務器,以檢查它們是否每隔15分鐘在服務器上聯機。我的代碼正在工作,但離線阻塞線程的服務器極大地減慢了進度。我使用了20個線程,更多的會導致Python的UDP套接字慢下來爬行。什麼是檢查服務器是否在線的合理超時時間?
目前我在決定服務器處於脫機狀態之前使用了5秒的超時時間。這個限制是否可以進一步降低,還是必須升高?
請不要建議使用的心跳,我的服務器來進行遊戲,其中有水蛭並沒有收到最心跳的非官方masterserver。
您不必使用同步通信(即發送數據包,阻止並等待結果),尤其是在您使用UDP的情況下。只需要一個線程發送ping命令,另一個線程不斷接收同一個socket上的pongs。如果您必須對結果進行復雜的處理,您可能需要使用另一個。
挑戰將在發送邏輯 - 你不想壓倒你自己的互聯網連接,所以我會建議一個可配置的數據包速率。此外,UDP數據包可能會在網絡中丟失,因此在放棄之前重新發送至少一次或兩次。作爲超時,我建議大約2秒鐘,因爲如果對遊戲(即高度延遲敏感)的服務器進行ping操作的時間超過該時間,則可能無法使用。
您也可以將其添加到serverfault.com。 – cwallenpoole