2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
這在很大程度上取決于套接字的使用頻率。例如,如果您知道客戶端將每 50 毫秒向服務(wù)器發(fā)送一次請求,那么保持套接字打開會更容易。但是,如果您知道客戶端只會每 5 分鐘從套接字請求一次信息,那么關(guān)閉連接并在需要時(shí)創(chuàng)建一個(gè)新連接可能會更好。如果您不知道下一個(gè)請求何時(shí)創(chuàng)建,也是如此。
在服務(wù)器端創(chuàng)建一個(gè)新的 Socket 并不是很昂貴,所以如果它不經(jīng)常使用,最好關(guān)閉連接。一個(gè)例外可能是一個(gè)特殊的套接字,它在創(chuàng)建時(shí)需要驗(yàn)證或其他昂貴的東西,但在學(xué)校項(xiàng)目中可能不是這種情況。
所以總的來說:這取決于套接字的使用情況,但是如果您不確定它是否經(jīng)常使用,最好關(guān)閉它并在需要時(shí)再次打開它。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
與這個(gè)問題相關(guān):
如果您擔(dān)心超過可以打開的最大套接字?jǐn)?shù)(我想這在您的情況下是極不可能的)您可以創(chuàng)建一個(gè)解決方法,您使用 TCP 最初建立連接,向客戶端發(fā)送一個(gè) UID( Unique Identifier,64 位unsigned long long
類型應(yīng)該足夠了)然后關(guān)閉 TCP 連接。填寫并維護(hù)一個(gè)詳細(xì)說明連接詳細(xì)信息(IP 地址、唯一標(biāo)識符代碼)的結(jié)構(gòu)(或您的情況下的 Class 對象),然后等待通過 UDP(用戶數(shù)據(jù)報(bào)協(xié)議,TCP 的替代方案)發(fā)送的到達(dá)數(shù)據(jù)包。如果您決定使用 UDP,請注意您需要實(shí)現(xiàn)一種重新排序數(shù)據(jù)包的方法以重建字節(jié)流(序列化)和一種在數(shù)據(jù)包不知何故未到達(dá)時(shí)重新發(fā)送數(shù)據(jù)包的機(jī)制(數(shù)據(jù)包丟失恢復(fù)) .
聽起來比實(shí)際情況更糟。不過,我會重復(fù)一遍,如果您不擔(dān)心超出任何限制,請不要為這些錯(cuò)綜復(fù)雜的事情而煩惱。
添加回答
舉報(bào)