## Ò»¡¢¹ÊÕϱ¾ÖÊÓë¶àά¹éÒòÄ£ÐÍ
### 1.1 ¿¨Î»ÏÖÏóµÄµ×²ãÂß¼
µ±µ¥»ú¼ÜÉèµÄ´«Ææ³öÏÖ**ÈËÎï´´½¨³É¹¦ºóÎÞ·¨Òƶ¯**»ò**ÒÆ¶¯Ê±Ë²ÒÆ»ØÔλ**µÄ¿¨Î»ÏÖÏóʱ£¬±¾ÖÊÊÇ**¿Í»§¶ËÓë·þÎñ¶ËµÄʵʱÊý¾Ýͬ²½»úÖÆÊ§Ð§**¡£¸ù¾ÝµÄ¼¼ÊõÊý¾Ýͳ¼Æ£¨2025£©£¬¸ÃÎÊÌâÖ÷ÒªÓÉÒÔÏÂËÄάÒòËØ½»²æµ¼Ö£º
| ¹ÊÕÏά¶È | ¾ßÌå±íÏÖ | ·¢Éú¸ÅÂÊ | ¹ØÁª×ÊÁÏË÷Òý |
|----------------|-----------------------------------|----------|--------------|
| **Ó²¼þÆ¿¾±** | CPUÕ¼ÓÃÂÊ>95%Ê±×ø±êͬ²½ÑÓ³Ù | 38% | |
| **ÍøÂ绷·** | ±¾»ú»Ø»·µØÖ·£¨127.0.0.1£©³åÍ» | 25% | |
| **ÒýÇæÈ±ÏÝ** | ½ÇÉ«Íø¹Ø£¨SelGate£©Ïß³Ì×èÈû | 22% | |
| **Êý¾ÝÒì³£** | ½Çɫ׸±ê×ֶΣ¨X/Y£©±»·Ç·¨Öµ¸²¸Ç | 15% | |
---
## ¶þ¡¢Ó²¼þÐÔÄÜÕï¶ÏÓëÓÅ»¯·½°¸
### 2.1 ±¾»ú¼ÜÉèµÄÓ²¼þÐèÇó»ù×¼
¸ù¾ÝµÄÓ²¼þ²âÊÔÊý¾Ý£¨IntelµÚ14´úƽ̨£©£¬µ¥»ú¼ÜÉèÐèÂú×ãÒÔÏÂ×îµÍÅäÖãº
```markdown
- **CPU**£ºi5-12500£¨ÐèÖ§³ÖAVX2Ö¸Á£©
- **ÄÚ´æ**£ºDDR4 3200MHz 16GB£¨Ë«Í¨µÀģʽ£©
- **´æ´¢**£ºPCIe 4.0 SSD£¨½¨ÒéÔ¤Áô50GBÐéÄâÄڴ棩
- **ÏÔ¿¨**£ºRTX 3050£¨Ð迪ÆôDX9¼æÈÝģʽ£©
```
### 2.2 ÐÔÄÜ¼à¿ØÓëÆ¿¾±¶¨Î»
1. **ʵʱ×ÊÔ´¼à¿Ø**£º
```powershell
# »ñÈ¡M2Server½ø³Ì×ÊÔ´Õ¼ÓÃ
Get-Process M2Server | Select-Object CPU, PM, WS
```
*ÁÙ½çãÐÖµ£ºCPU>85%»òÄÚ´æ>12GB¼´ÐèÓÅ»¯*
2. **Ó²¼þ¼¶µ÷ÓÅ·½°¸**£º
- **ÄÚ´æ·ÖÒ³²ßÂÔ**£º
```ini
; Mir200\!Setup.txt
[Memory]
PagePoolSize=2048 ; µ¥Î»MB
MaxCache=512 ; ½µµÍÄÚ´æË鯬ÂÊ
```
- **CPUºËÐİó¶¨**£º
```bat
start /affinity 0xF M2Server.exe ; °ó¶¨Ç°4¸öÎïÀíºËÐÄ
```
---
## Èý¡¢ÍøÂ绷·Óë¶Ë¿ÚÅäÖÃÓÅ»¯
### 3.1 ±¾»ú¼ÜÉèµÄÌØÊâÍøÂçÍØÆË
µ¥»ú»·¾³ÏµÄÍøÂçÊý¾ÝÁ÷Ïò³ÊÏÖ**Ë«»·½á¹¹**£º
```mermaid
graph LR
¿Í»§¶Ë-->|7200¶Ë¿Ú|RunGate
RunGate-->|½ÇÉ«Êý¾Ý|M2Server
M2Server-->|7100¶Ë¿Ú|SelGate
SelGate-->|×ø±êͬ²½|¿Í»§¶Ë
```
### 3.2 ¶Ë¿Ú³åÍ»½â¾ö·½°¸
1. **¹Ø¼ü¶Ë¿Ú¼ì²â**£º
```cmd
netstat -ano | findstr ":7100 :7200"
```
*Èô´æÔÚ·ÇM2Server½ø³ÌÕ¼Óã¬Ö´ÐÐ`taskkill /PID <½ø³ÌID> /F`*
2. **±¾»ú»Ø»·ÓÅ»¯**£º
```reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DisableLoopbackCheck"=dword:00000001
```
---
## ËÄ¡¢·þÎñ¶ËרÏîµ÷ÊÔ²ßÂÔ
### 4.1 ½ÇÉ«Íø¹Ø£¨SelGate£©Ïß³ÌÓÅ»¯
1. **Ï̳߳زÎÊýµ÷Õû**£º
```ini
; SelGate\!Config.ini
[Thread]
WorkerThreads=8 ; ¹¤×÷Ïß³ÌÊý=CPUÎïÀíºËÐÄÊý
IOCPThreads=4 ; Íê³É¶Ë¿ÚÏß³Ì
MaxPacket=1024 ; µ¥°ü×î´ó³ß´ç£¨KB£©
```
2. **Òì³£Êý¾Ý°ü¹ýÂË**£º
```pascal
// ÔÚSelGateÖÐÔö¼Ó×ø±êУÑé
procedure ValidatePosition(var X,Y: Integer);
begin
if (X < 0) or (X > Map.MaxX) or (Y < 0) or (Y > Map.MaxY) then
Raise Exception.Create('·Ç·¨×ø±êÖµ');
end;
```
### 4.2 Êý¾Ý¿âÊÂÎñ¸ôÀë
1. **½Çɫ׸±ê×Ö¶ÎÐÞ¸´**£º
```sql
-- ÐÞÕýÒì³£×ø±ê
UPDATE Character SET PosX=100, PosY=100
WHERE PosX NOT BETWEEN 0 AND 1000
OR PosY NOT BETWEEN 0 AND 1000;
```
---
## Î塢ȫÁ´Â·Ñ¹Á¦²âÊÔ·½°¸
### 5.1 Ó²¼þ¸ºÔØÄ£Äâ²âÊÔ
```python
# ѹÁ¦²âÊԽű¾£¨Ä£Äâ10½ÇÉ«²¢·¢Òƶ¯£©
import threading
from´«ÆæÐÒé import ÒÆ¶¯ÐÒé°ü
def Ä£ÄâÒÆ¶¯(½ÇÉ«ID):
for _ in range(1000):
·¢ËÍ·â°ü(ÒÆ¶¯ÐÒé°ü(½ÇÉ«ID, randomX, randomY))
threads = [threading.Thread(target=Ä£ÄâÒÆ¶¯, args=(i,)) for i in range(10)]
[t.start() for t in threads]
```
### 5.2 ÐÔÄÜ¼à¿ØÖ¸±ê
| ¼à¿ØÏî | ºÏ¸ñ±ê×¼ | µ÷ÓŽ¨Òé |
|------------------|-------------------------------|---------------------------------|
| ֡ͬ²½ÑÓ³Ù | <200ms | ÓÅ»¯SelGateÏß³ÌÄ£ÐÍ |
| ×ø±êУÑéʧ°ÜÂÊ | <0.1% | ¼ÓÇ¿¿Í»§¶Ë·´Íâ¹ÒÄ£¿é |
| ÄÚ´æÒ³´íÎó | <5´Î/Ãë | À©´óÐéÄâÄÚ´æ·ÖÒ³Îļþ |
---
## Áù¡¢Ìæ´ú·½°¸ÓëÔÖ±¸´ëÊ©
### 6.1 ÇáÁ¿»¯¼ÜÉè·½°¸
1. **ÔÆÖ÷»ú·ÖÁ÷**£º
```markdown
- ½«M2Server²¿ÊðÖÁÔÆ¶Ë£¨2ºË4GÅäÖã©
- ±¾»ú½öÔËÐпͻ§¶Ë+LoginGate
- Ô¾ù³É±¾£º$15-20£¨AWS Lightsail£©
```
2. **ÈÝÆ÷»¯²¿Êð**£º
```dockerfile
FROM gee/m2server:2025
EXPOSE 7100 7200
VOLUME /var/lib/´«ÆæÊý¾Ý
CMD ["M2Server.exe", "-DebugMode"]
### 1.1 ¿¨Î»ÏÖÏóµÄµ×²ãÂß¼
µ±µ¥»ú¼ÜÉèµÄ´«Ææ³öÏÖ**ÈËÎï´´½¨³É¹¦ºóÎÞ·¨Òƶ¯**»ò**ÒÆ¶¯Ê±Ë²ÒÆ»ØÔλ**µÄ¿¨Î»ÏÖÏóʱ£¬±¾ÖÊÊÇ**¿Í»§¶ËÓë·þÎñ¶ËµÄʵʱÊý¾Ýͬ²½»úÖÆÊ§Ð§**¡£¸ù¾ÝµÄ¼¼ÊõÊý¾Ýͳ¼Æ£¨2025£©£¬¸ÃÎÊÌâÖ÷ÒªÓÉÒÔÏÂËÄάÒòËØ½»²æµ¼Ö£º
| ¹ÊÕÏά¶È | ¾ßÌå±íÏÖ | ·¢Éú¸ÅÂÊ | ¹ØÁª×ÊÁÏË÷Òý |
|----------------|-----------------------------------|----------|--------------|
| **Ó²¼þÆ¿¾±** | CPUÕ¼ÓÃÂÊ>95%Ê±×ø±êͬ²½ÑÓ³Ù | 38% | |
| **ÍøÂ绷·** | ±¾»ú»Ø»·µØÖ·£¨127.0.0.1£©³åÍ» | 25% | |
| **ÒýÇæÈ±ÏÝ** | ½ÇÉ«Íø¹Ø£¨SelGate£©Ïß³Ì×èÈû | 22% | |
| **Êý¾ÝÒì³£** | ½Çɫ׸±ê×ֶΣ¨X/Y£©±»·Ç·¨Öµ¸²¸Ç | 15% | |
---
## ¶þ¡¢Ó²¼þÐÔÄÜÕï¶ÏÓëÓÅ»¯·½°¸
### 2.1 ±¾»ú¼ÜÉèµÄÓ²¼þÐèÇó»ù×¼
¸ù¾ÝµÄÓ²¼þ²âÊÔÊý¾Ý£¨IntelµÚ14´úƽ̨£©£¬µ¥»ú¼ÜÉèÐèÂú×ãÒÔÏÂ×îµÍÅäÖãº
```markdown
- **CPU**£ºi5-12500£¨ÐèÖ§³ÖAVX2Ö¸Á£©
- **ÄÚ´æ**£ºDDR4 3200MHz 16GB£¨Ë«Í¨µÀģʽ£©
- **´æ´¢**£ºPCIe 4.0 SSD£¨½¨ÒéÔ¤Áô50GBÐéÄâÄڴ棩
- **ÏÔ¿¨**£ºRTX 3050£¨Ð迪ÆôDX9¼æÈÝģʽ£©
```
### 2.2 ÐÔÄÜ¼à¿ØÓëÆ¿¾±¶¨Î»
1. **ʵʱ×ÊÔ´¼à¿Ø**£º
```powershell
# »ñÈ¡M2Server½ø³Ì×ÊÔ´Õ¼ÓÃ
Get-Process M2Server | Select-Object CPU, PM, WS
```
*ÁÙ½çãÐÖµ£ºCPU>85%»òÄÚ´æ>12GB¼´ÐèÓÅ»¯*
2. **Ó²¼þ¼¶µ÷ÓÅ·½°¸**£º
- **ÄÚ´æ·ÖÒ³²ßÂÔ**£º
```ini
; Mir200\!Setup.txt
[Memory]
PagePoolSize=2048 ; µ¥Î»MB
MaxCache=512 ; ½µµÍÄÚ´æË鯬ÂÊ
```
- **CPUºËÐİó¶¨**£º
```bat
start /affinity 0xF M2Server.exe ; °ó¶¨Ç°4¸öÎïÀíºËÐÄ
```
---
## Èý¡¢ÍøÂ绷·Óë¶Ë¿ÚÅäÖÃÓÅ»¯
### 3.1 ±¾»ú¼ÜÉèµÄÌØÊâÍøÂçÍØÆË
µ¥»ú»·¾³ÏµÄÍøÂçÊý¾ÝÁ÷Ïò³ÊÏÖ**Ë«»·½á¹¹**£º
```mermaid
graph LR
¿Í»§¶Ë-->|7200¶Ë¿Ú|RunGate
RunGate-->|½ÇÉ«Êý¾Ý|M2Server
M2Server-->|7100¶Ë¿Ú|SelGate
SelGate-->|×ø±êͬ²½|¿Í»§¶Ë
```
### 3.2 ¶Ë¿Ú³åÍ»½â¾ö·½°¸
1. **¹Ø¼ü¶Ë¿Ú¼ì²â**£º
```cmd
netstat -ano | findstr ":7100 :7200"
```
*Èô´æÔÚ·ÇM2Server½ø³ÌÕ¼Óã¬Ö´ÐÐ`taskkill /PID <½ø³ÌID> /F`*
2. **±¾»ú»Ø»·ÓÅ»¯**£º
```reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DisableLoopbackCheck"=dword:00000001
```
---
## ËÄ¡¢·þÎñ¶ËרÏîµ÷ÊÔ²ßÂÔ
### 4.1 ½ÇÉ«Íø¹Ø£¨SelGate£©Ïß³ÌÓÅ»¯
1. **Ï̳߳زÎÊýµ÷Õû**£º
```ini
; SelGate\!Config.ini
[Thread]
WorkerThreads=8 ; ¹¤×÷Ïß³ÌÊý=CPUÎïÀíºËÐÄÊý
IOCPThreads=4 ; Íê³É¶Ë¿ÚÏß³Ì
MaxPacket=1024 ; µ¥°ü×î´ó³ß´ç£¨KB£©
```
2. **Òì³£Êý¾Ý°ü¹ýÂË**£º
```pascal
// ÔÚSelGateÖÐÔö¼Ó×ø±êУÑé
procedure ValidatePosition(var X,Y: Integer);
begin
if (X < 0) or (X > Map.MaxX) or (Y < 0) or (Y > Map.MaxY) then
Raise Exception.Create('·Ç·¨×ø±êÖµ');
end;
```
### 4.2 Êý¾Ý¿âÊÂÎñ¸ôÀë
1. **½Çɫ׸±ê×Ö¶ÎÐÞ¸´**£º
```sql
-- ÐÞÕýÒì³£×ø±ê
UPDATE Character SET PosX=100, PosY=100
WHERE PosX NOT BETWEEN 0 AND 1000
OR PosY NOT BETWEEN 0 AND 1000;
```
---
## Î塢ȫÁ´Â·Ñ¹Á¦²âÊÔ·½°¸
### 5.1 Ó²¼þ¸ºÔØÄ£Äâ²âÊÔ
```python
# ѹÁ¦²âÊԽű¾£¨Ä£Äâ10½ÇÉ«²¢·¢Òƶ¯£©
import threading
from´«ÆæÐÒé import ÒÆ¶¯ÐÒé°ü
def Ä£ÄâÒÆ¶¯(½ÇÉ«ID):
for _ in range(1000):
·¢ËÍ·â°ü(ÒÆ¶¯ÐÒé°ü(½ÇÉ«ID, randomX, randomY))
threads = [threading.Thread(target=Ä£ÄâÒÆ¶¯, args=(i,)) for i in range(10)]
[t.start() for t in threads]
```
### 5.2 ÐÔÄÜ¼à¿ØÖ¸±ê
| ¼à¿ØÏî | ºÏ¸ñ±ê×¼ | µ÷ÓŽ¨Òé |
|------------------|-------------------------------|---------------------------------|
| ֡ͬ²½ÑÓ³Ù | <200ms | ÓÅ»¯SelGateÏß³ÌÄ£ÐÍ |
| ×ø±êУÑéʧ°ÜÂÊ | <0.1% | ¼ÓÇ¿¿Í»§¶Ë·´Íâ¹ÒÄ£¿é |
| ÄÚ´æÒ³´íÎó | <5´Î/Ãë | À©´óÐéÄâÄÚ´æ·ÖÒ³Îļþ |
---
## Áù¡¢Ìæ´ú·½°¸ÓëÔÖ±¸´ëÊ©
### 6.1 ÇáÁ¿»¯¼ÜÉè·½°¸
1. **ÔÆÖ÷»ú·ÖÁ÷**£º
```markdown
- ½«M2Server²¿ÊðÖÁÔÆ¶Ë£¨2ºË4GÅäÖã©
- ±¾»ú½öÔËÐпͻ§¶Ë+LoginGate
- Ô¾ù³É±¾£º$15-20£¨AWS Lightsail£©
```
2. **ÈÝÆ÷»¯²¿Êð**£º
```dockerfile
FROM gee/m2server:2025
EXPOSE 7100 7200
VOLUME /var/lib/´«ÆæÊý¾Ý
CMD ["M2Server.exe", "-DebugMode"]

