關於公網和內網之間Socket的通訊

2022-01-21 18:57:46 字數 766 閱讀 6622

眾所周知,內網是受閘道器保護的,所以公網要直接訪問內網,在socket**層面上是無法做到的,當然有其他手段可以做到,但都要涉及到閘道器等,這裡不做討論。

那麼qq那些是怎麼內網網互通的呢。google加查msdn後了解到,只要伺服器在公網上,有公網ip

那麼內網客戶端就可以發起socket的connect請求,這樣內網客戶端和公網伺服器之間就建立了乙個socket通訊渠道,只要這個渠道建立了,公網就可以通過這個socket回發資料給內網客戶端。

也就是說公網訪問內網,必須由內網先發起連線請求。

可是當伺服器有很多資料要不定時的發給客戶端時(比如聊天室,每個客戶端都給伺服器發訊息,伺服器要將這些訊息**給所有客戶端),那麼就必須保持客戶端到伺服器之間的socket連線了,所以必然要為每個客戶端開啟乙個執行緒來接收資料,否則會造成阻塞。

為啥會阻塞呢,因為socket的receive介面是處於阻止模式的,也就是如果客戶端沒有資料傳送過來,那麼程式會停止在那兒等待資料,如果不為每個客戶端開啟乙個執行緒,那麼如果任意乙個客戶端沒有發東西過來,程式就卡死了。雖然這樣可以解決公網訪問內網的問題,但是有很大弊端,一旦客戶端連線數多的話,比如1000人連線伺服器,那麼伺服器就要開啟1000個執行緒,系統負擔將會很重。

對於每個伺服器與客戶端的連線,使用非同步傳輸介面,那麼如果某個socket沒有資料過來時,程式會處理其他socket的receive,而不會阻塞在某乙個socket上。

雖然非同步傳輸的實現原理也是開啟多執行緒,但是他利用的了系統更核心的東西,包括硬體層面上,大大優化了系統效能,比自己手動寫的開啟多執行緒效能更優。

公網IP和內網IP

內網也就是區域網,最直觀的就是像網咖,公司內部的電腦用交換機,hub,路由連起來的。再通過光纖,貓接入internet的。內網ip就是國際上分配ip的時候,留出一部分ip,不在internet上用,用於內部區域網等,雖然功能一樣,但不能在internat上使用。屬於非註冊位址,專門為組織機構內部使用...

內網IP和公網IP的區別

什麼是內網ip 一些小型企業或者學校,通常都是申請乙個固定的ip位址,然後通過ip共享 ip sharing 使用整個公司或學校的機器都能夠訪問網際網路。而這些企業或學校的機器使用的ip位址就是內網ip,內網ip是在規劃ipv4協議時,考慮到ip位址資源可能不足,就專門為內部網設計私有ip位址 或稱...

內網IP和公網IP的區別

什麼是內網ip 一些小型企業或者學校,通常都是申請乙個固定的ip位址,然後通過ip共享 ip sharing 使用整個公司或學校的機器都能夠訪問網際網路。而這些企業或學校的機器使用的ip位址就是內網ip,內網ip是在規劃ipv4協議時,考慮到ip位址資源可能不足,就專門為內部網設計私有ip位址 或稱...