लिनक्स कर्नेल> = 3.9 में गिरी लोड संतुलन के साथ प्रक्रियाओं के बीच सॉकेट के साझा करने की अनुमति SO_REUSEPORT
की स्थापना द्वारा: http://lwn.net/Articles/542629/यूनिक्स डोमेन सॉकेट पर SO_REUSEPORT का उपयोग किया जा सकता है?
कैसे इस प्रकार AF_UNIX
के कोटर के लिए इस्तेमाल किया जा सकता है?
ऐसा लगता है, यह केवल टीसीपी के साथ काम करता है, यूनिक्स डोमेन सॉकेट नहीं।
import os
import socket
if not hasattr(socket, 'SO_REUSEPORT'):
socket.SO_REUSEPORT = 15
if True:
# using TCP sockets
# works. test with: "echo data | nc localhost 8888"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
s.bind(('', 8888))
else:
# using Unix domain sockets
# does NOT work. test with: "echo data | nc -U /tmp/socket1"
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
try:
os.unlink("/tmp/socket1")
except:
pass
s.bind("/tmp/socket1")
s.listen(1)
while True:
conn, addr = s.accept()
print('Connected to {}'.format(os.getpid()))
data = conn.recv(1024)
conn.send(data)
conn.close()
प्रारंभ 2 उदाहरणों, और निम्न कई बार चलाकर परीक्षण:
यहाँ एक अजगर परीक्षण कार्यक्रम है टीसीपी यूनिक्स डोमेन सॉकेट के लिए
echo data | nc -U /tmp/socket1
के लिए
echo data | nc localhost 8888
टीसीपी का उपयोग करते समय, आने वाली ग्राहक दोनों सर्वरों के लिए संतुलित हो जाएगा। यूनिक्स डोमेन सॉकेट के साथ, आने वाले क्लाइंट सभी अंतिम प्रारंभ सर्वर से कनेक्ट हो जाते हैं।
आपके द्वारा संदर्भित आलेख की पहली वाक्य: '3.9 विकास चक्र में विलय की गई सुविधाओं में से एक SO_REUSEPORT सॉकेट विकल्प के लिए टीसीपी और यूडीपी समर्थन था। ऐसा लगता है कि केवल टीसीपी और यूडीपी के लिए समर्थित है। –
मेरे पास सटीक उत्तर नहीं है लेकिन ऐसा लगता है कि कर्नेल में यूनिक्स सॉकेट को संतुलित करने का कोई मतलब नहीं है। इसमें बहुत उपयोगी जानकारी है: http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t –
@AlexShkop धन्यवाद! एफडब्ल्यूआईडब्ल्यू, मैं यूडीएस पर विकल्प सेट कर सकता हूं, और यह एकाधिक प्रक्रियाओं को एक ही यूडीएस (सुनना) खोलने की अनुमति देगा। जब विकल्प सेट नहीं होता है, तो ऐसा करने की अनुमति नहीं होती है। हालांकि, यह लोड-बैलेंस नहीं है। मैं एक आधिकारिक उत्तर की तलाश में हूं जो या तो मनाए गए व्यवहार का समर्थन करता है या दिखाता है कि एलबी-संतुलित साझा यूडीएस कैसे करें। – oberstet