Điều này có liên quan đến Hiệu suất MMO ngoại trừ câu hỏi đó là về băng thông. Đây là về tải cpu.
Tôi kết hợp một FPS đơn giản bằng cách sử dụng node.js và webGL. Nó cực kỳ đơn giản, giống như bản sao BuddyMaze của Mê cung MIDI. Có rất ít điều xảy ra, mọi người đều di chuyển theo hai chiều (không có chiều cao), bắn những viên đạn đơn giản và chạy vào tường.
Ngay bây giờ, nếu tôi thực hiện nhiều kết nối đến máy chủ nơi mọi người chơi bắn nhanh trong khi quay vòng tròn, tôi có thể nhận được khoảng 15 - 20 người chơi trong trò chơi trước khi máy chủ rút hết lõi và chậm lại. Và đây là khi chạy ở tốc độ 30 khung hình / giây trên máy chủ. Ở tốc độ 10 khung hình / giây, tôi nhận được khoảng 25 - 30 kết nối. Điều này khá tệ, vì trò chơi sẽ còn nhiều việc phải làm sớm và tôi sẽ cần phải phù hợp với nhiều người chơi hơn để đây là một nỗ lực khả thi.
Anh tôi chỉ ra một số thống kê về máy chủ TF2 của đồng nghiệp. Máy chủ của anh ta có thông số kỹ thuật thấp hơn so với chúng tôi, nhưng nó chạy TF2, rõ ràng là một trò chơi phức tạp hơn nhiều, với con số khổng lồ 500 tick mỗi giây, với 36 người dùng mỗi lõi. Ngoài ra, chúng tôi hiện tiêu thụ nhiều băng thông hơn so với chúng, nhưng chúng tôi vẫn chưa cố gắng hạ thấp mức đó.
Sao có thể như thế được? Có những loại thủ thuật nào để tăng hiệu suất máy chủ đến mức độ này? Một số điều mà tôi biết bao gồm:
- Giảm tốc độ khung hình trên máy chủ và nội suy các vị trí trên máy khách. Tôi đã nhận được một số lợi ích, nhưng rõ ràng máy chủ TF2 thậm chí không bận tâm đến điều này.
- Làm những việc đắt tiền như phát hiện va chạm trên máy khách và xác minh nó không thường xuyên trên máy chủ. Tôi chưa chuyển cái này đến bây giờ, tôi sẽ tối nay. Mặc dù vậy tôi không mong đợi một lợi ích to lớn như vậy.
- Chia sân chơi thành các khu vực (cây bốn phương) để giảm thiểu tính toán. Chưa có cơ hội cho việc này.
- Tôi đã xem xét khả năng đáng tiếc rằng node.js chỉ chậm hơn bất cứ thứ gì TF2 đang sử dụng và có thể không phù hợp với loại tác vụ cường độ cao này.
- Có phải tất cả trong ma thuật cấu hình máy chủ?
Vì vậy, các thủ thuật khác của ngành chỉ làm tối thiểu trên máy chủ nhưng vẫn có trải nghiệm trò chơi hoàn hảo là gì? Có một cuộc xung đột lớn giữa "trì hoãn khách hàng để tiết kiệm thời gian cpu" và "không tin tưởng khách hàng", vì vậy có thể giúp biết được đường kẻ được vẽ ở đâu trong các tình huống khác nhau?
Cập nhật
Profiling thực sự là câu thần chú duy nhất tôi từng thấy đó là hoàn toàn không thể sai lầm. Tôi nhanh chóng bọc một số hàm thời gian xung quanh mã của mình (cảm ơn, FP!) Và phát hiện ra điều tôi không bao giờ mong đợi: hành động truyền phát dữ liệu tới các máy khách chiếm gần như toàn bộ thời gian thực hiện. Cụ thể, khoảng 90% của nó. Thử nghiệm thêm cho thấy thời gian này phụ thuộc vào cả số lượng khách hàng và kích thước của dữ liệu, nhưng nhiều hơn sau đó. Khi tải 20 người dùng, tôi đã giảm 90% thời lượng phát sóng, từ 24ms xuống chỉ còn hơn 2ms bằng cách chỉ gửi "{}" thay vì dữ liệu đầy đủ. Nhưng chỉ với 5 người dùng, phát sóng mất khoảng 0,5 ms. Vì vậy, tôi rõ ràng cần phải làm một số tối ưu hóa ở đây.
Cải tiến rõ ràng nhất đầu tiên là dòng kiểm tra thị lực. Điều này sẽ làm giảm cả số lượng người quan tâm đến dữ liệu và cả lượng dữ liệu được gửi cho các bên quan tâm. Có những thủ thuật nào khác trong lĩnh vực này mà tôi có thể thử, trong đó tập trung vào việc giảm thiểu chi phí cho hoạt động phát sóng của tôi?