2009-12-09 31 views
0

我正在運行一個遊戲網站,用戶使用Adobe Flash客戶端連接到運行在Fedora Linux機器上的C服務器。如何在Linux/C中獲得更穩定的套接字連接

用戶經常抱怨斷線。通常它們是「通過對等方重置連接」-disconnects。

有什麼辦法可以使連接更加穩定,還是完全依賴於從用戶主機到我的服務器的路由?

我嘗試過的一件事是通過每隔一分鐘以明文形式發送PING以使其更穩定以避免超時問題。

任何人有更多的想法?

回答

0

你在哪裏運行服務器?
在家?工作中?在託管設施?
這會造成非常大的差異。

你可以設計你的應用程序連接到服務器上的兩個插座,然後負載平衡或使其主動/被動(或主動/主動)?

+0

我們在託管設施中使用共址。我們有四臺服務器,一臺用於「遊戲室」。每個用戶都有自己的套接字。一晚上可以有大約2000人在線(每臺服務器最多200人)。 – Henrik 2009-12-09 10:05:14

+0

我在想,如果在Linux/setsockopt's et c中有任何配置設置,我可以嘗試改變。 – Henrik 2009-12-09 10:05:54

+0

我沒有使用任何設置,套接字通常非常健壯。在封閉的環境中斷開連接並不常見,但可能發生在「現實世界」中。你可能需要重新設計使用UDP(無連接),然後在上面創建自己的協議(上面提到的兩個套接字/負載平衡/主動/主動/等)。 – KevinDTimm 2009-12-09 10:37:04

0

您可以使用SO_KEEPALIVE TCP套接字選項。

1

您沒有耗盡服務器進程在服務器上給出的套接字/內存使用/ CPU的數量,是嗎?

檢查ulimit。如果可能的話,嘗試跟蹤源代碼中的錯誤消息(當發送RST包時),即當send()或accept()返回錯誤值時。在這種情況下,在日誌中打印調試消息;如果你真的看中調試它做服務器的模擬:

  • 一個單獨的機器(可能是服務器的克隆)
  • 模擬數千個連接上來看,它進入調試模式(或找網絡利用程序)
  • 追蹤呼叫和/或嗅探連接
+0

另外,你檢查了('netstat')客戶退出時,您是否正確地釋放連接? – bstpierre 2010-07-24 23:57:37