[英]Sockets Python Connection
我正在使用套接字在Python中編寫客戶端/服務器軟件。
我有一個問題,特別是TCP / IP和Socket模型:
我在我的服務器端使用這個代碼示例(Python中的服務器端程序):
import socket
# Create a TCP/IP socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Prevent from "address already in use"
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind the socket to port
server_address = ("localhost", 5000)
server.bind(server_address)
# Listen for connections
server.listen(5)
# Wait for on incomming connection
read = connection.recv(1024)
print "Received: ",read
一切都很好, 但我有一些概念性的問題:
1)如何實現這種通信的最佳實踐? 我是否必須為CLIENT和SERVER程序之間的TCP / IP設置心跳流量? 我看到即使我離開客戶端程序沒有流量(空閑)與服務器,當我回來並發送另一條消息(連接建立后的很多分鍾和幾分鍾)消息仍然存在。 這是正常的行為嗎?
2) TCP / IP堆棧甚至“插座模塊”都有任何TIMEOUT功能?!?! 誰可以使用套接字模塊控制丟失我們在Python中的“超時”連接?
Tks for all!
在TCP中,不需要心跳來保持連接活動。 只要兩個端點仍然健康,連接就會存在。
但是,心跳可能有助於及早發現故障。 否則,您只會在嘗試發送數據(或期望另一端發送數據)時才知道連接是否仍然存在。 在許多情況下,這已經足夠了。 但對於某些人(如IRC應用程序),您希望在客戶端關閉后立即知道,因此您可以通知其他人他們已從通道中刪除。
您可以使用SO_KEEPALIVE
套接字選項自動發送心跳包,但我沒有使用它的經驗。 這個問題可能會有所幫助。
對於超時,請使用SO_RCVTIMEO
和SO_SNDTIMEO
套接字選項。 有關更多信息,請參閱man 7 socket
和Python套接字文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.