मर्ज के बाद jrpm शाखा पर आधारित (pulsexlb सुविधाएँ और jrpm-विशिष्ट अनुकूलन सहित)। पैरामीटर डिफ़ॉल्ट मान
src/table/settings/network_settings.iniसे लिए गए हैं, वास्तविक लोड परीक्षण के अनुसार समायोजित करने की सिफारिश की जाती है।
एक, लागू प्रदर्शन अनुकूलन (इस बार)
| अनुकूलन | कमिट | विवरण |
|---|---|---|
| समानांतर डाउनलोड समवर्तीता कॉन्फ़िगर करने योग्य | 4716b925 | network.content_download_parallel (डिफ़ॉल्ट 4, 1-8): सामग्री डाउनलोड के दौरान एक साथ होने वाली फ़ाइलों की संख्या, हार्डकोडेड 4 के बजाय |
| मल्टी-मिरर + फ़ाइल-स्तरीय समानांतर डाउनलोड | d4c45740 (F1) | network.content_mirrors अल्पविराम से अलग मल्टी-मिरर, विफलता पर मिरर पुनर्प्रयास, अंत में पुराने प्रोटोकॉल पर वापसी |
| सर्वर मल्टी-वर्जन क्लाइंट संगतता | cb9848b7 | सर्वर एक साथ jrpm / मूल jgrpp / pulsexlb क्लाइंट स्वीकार कर सकता है |
दो, सर्वर प्रदर्शन प्रमुख पैरामीटर (jgrpp प्रणाली)
| सेटिंग | डिफ़ॉल्ट | सीमा | अर्थ | ट्यूनिंग सुझाव |
|---|---|---|---|---|
network.sync_freq | 100 | 0-100 | कितने फ्रेम पर एक बार फ्रेम सिंक सत्यापन (desync जाँच)। बड़ा मान = कम बैंडविड्थ, छोटा मान = जल्दी डीसिंक का पता लगाना | मल्टीप्लेयर स्थिरता प्राथमिकता होने पर 20-50 तक कम करें; बार-बार desync होने पर कम करें |
network.frame_freq | 0 | 0-100 | सर्वर हर कितने फ्रेम पर एक बार कमांड फ्रेम पैकेट भेजता है (0 = हर फ्रेम भेजता है)। बड़ा मान = कम बैंडविड्थ/CPU, लेकिन ऑपरेशन विलंब बढ़ता है | सामान्य 0-3; अधिक खिलाड़ियों वाले सर्वर पर 5 तक, लोड परीक्षण के बाद तय करें |
network.commands_per_frame | 2 | 1-65535 | प्रति फ्रेम संसाधित क्लाइंट कमांड की ऊपरी सीमा (स्पैम/दुर्भावना रोकें) | अधिक खिलाड़ी, बार-बार ऑपरेशन होने पर 4-8 तक बढ़ाएँ |
network.commands_per_frame_server | 16 | 1-65535 | सर्वर के स्वयं के प्रति फ्रेम कमांड की ऊपरी सीमा | आमतौर पर बदलने की आवश्यकता नहीं |
network.bytes_per_frame | 8 | 1-65535 | दीर्घकालिक औसत प्रति फ्रेम प्राप्त बाइट्स की ऊपरी सीमा (बैंडविड्थ शेपिंग) | अच्छा ब्रॉडबैंड होने पर 16-32 तक बढ़ाएँ, बड़े मानचित्र सिंक गति सुधारें |
network.bytes_per_frame_burst | 256 | 1-65535 | आकस्मिक बाइट ऊपरी सीमा (अल्पकालिक पीक की अनुमति) | उपरोक्त आइटम के साथ बढ़ाएँ, जैसे 512 |
network.max_init_time | 60 | 0-32000 | क्लाइंट आरंभीकरण टाइमआउट (tick) | कमजोर नेटवर्क वाले खिलाड़ियों के लिए बढ़ाएँ |
network.max_join_time | 500 | 0-32000 | क्लाइंट जुड़ने (मानचित्र डाउनलोड + सिंक) टाइमआउट (tick) | बड़े मानचित्र/धीमी बैंडविड्थ के लिए 1000+ तक बढ़ाएँ |
network.max_download_time | 1000 | 0-32000 | मानचित्र डाउनलोड टाइमआउट (tick) | बड़े मानचित्र (4096+) के लिए 2000+ सुझाव |
network.max_lag_time | 800 | 0-32000 | क्लाइंट अधिकतम विलंब सहनशीलता (tick) | अधिक उच्च विलंब वाले खिलाड़ियों के लिए बढ़ाएँ, लेकिन desync जोखिम बढ़ता है |
नोट:
max_*_timeइकाई गेम tick (1/74 सेकंड ≈ 13.5ms) है;bytes_per_frameप्रति फ्रेम सिंक विंडो के औसत बाइट्स को संदर्भित करता है।
तीन, अनुशंसित सर्वर प्रारंभ कॉन्फ़िगरेशन (मल्टीप्लेयर परिदृश्य)
[network]
max_clients = 32 ; या आवश्यकतानुसार
max_companies = 15
frame_freq = 3 ; 0=हर फ्रेम कमांड भेजें (सबसे सुचारू); 3=समझौता बैंडविड्थ बचत
sync_freq = 50 ; जल्दी desync का पता लगाएं
commands_per_frame = 8
bytes_per_frame = 16
bytes_per_frame_burst = 512
max_join_time = 1000
max_download_time = 2000
max_lag_time = 1200
content_download_parallel = 4 ; क्लाइंट-साइड सामग्री डाउनलोड समवर्तीताचार, बाद में लागू किए जा सकने वाले प्रदर्शन अनुकूलन दिशाएँ (प्राथमिकता के अनुसार)
HTTP ट्रांसपोर्ट लेयर थ्रेड पूल + Range खंडित डाउनलोड (Openttd-Cluster 0007 विचार) वर्तमान स्थिति: F1 में पहले से "फ़ाइल-स्तरीय समानांतर" (एकाधिक फ़ाइलें एक साथ डाउनलोड) लागू है। 0007 HTTP लेयर में थ्रेड पूल +
CURLOPT_RANGEखंडन करता है, जो एकल बड़ी फ़ाइल (विशाल परिदृश्य .tar.gz) के लिए और गति बढ़ा सकता है। दोनों पूरक हैं लेकिन समान फ़ाइलों को बदलते हैं, F1 स्थिर होने के बाद वृद्धिशील रूप से करने का सुझाव।मानचित्र भेजने का अनुकूलन सत्यापित करें कि jrpm डिफ़ॉल्ट रूप से मानचित्र संपीड़न (zstd/lzma) चालू करता है या नहीं; बड़े मानचित्रों पर विभिन्न संपीड़न एल्गोरिदम के समय की तुलना करें।
Rust सर्वर रनटाइम (दीर्घकालिक वास्तुकला संदर्भ) Openttd-Cluster का otc-engine (Admin/RCON, Prometheus मीट्रिक्स, क्लस्टर failover, वेब पैनल, स्नैपशॉट ब्रिज) पूर्ण Rust इंजीनियरिंग FFI एकीकरण पर निर्भर करता है, जो "अगली पीढ़ी के सर्वर"-स्तरीय परिवर्तन है, न कि पैच-स्तरीय मर्ज; jrpm वर्तमान में शुद्ध C++ एकल बाइनरी बनाए रखता है।
गेम सिमुलेशन प्रदर्शन
- बड़े मानचित्र + बड़ी संख्या में वाहनों पर
economy/linkgraphपैरामीटर (linkgraph_settings.ini) पर ध्यान दें; - यदि चरम प्रदर्शन की आवश्यकता है, तो
settings_game.economy.वर्ग और पथ-खोज ऊपरी सीमा पैरामीटर (pathfindingसेटिंग्स) का अध्ययन करें।
- बड़े मानचित्र + बड़ी संख्या में वाहनों पर
पाँच, सत्यापन सुझाव
- सर्वर खोलें
openttd-jrpm -D -c server.cfg, कई jrpm क्लाइंट के साथ वास्तविक परीक्षण: जुड़ने का समय, फ्रेम सिंक स्थिरता (कोई desync संकेत नहीं), CPU/मेमोरी उपयोग; - सामग्री डाउनलोड:
content_download_parallel=8सेट करके NewGRF के एक बैच को डाउनलोड करने के समय की तुलना करें; - कमजोर नेटवर्क लोड परीक्षण:
max_lag_timeऔरsync_freqके संयोजन का परीक्षण करें, स्थिर सीमा खोजें।