nói dối e blog

Skynet Mở Mã Nguồn

Dự án Skynet mã nguồn mở

Hai ngày gần đây là điểm kiểm tra đầu tiên của mốc thứ hai trong dự án của chúng tôi. Hệ thống máy chủ của chúng tôi đang gặp một số vấn đề hiệu năng khi trải qua kiểm tra tải trọng. Rất nhiều khía cạnh vẫn còn dư địa tối ưu hóa đáng kể. Chúng tôi dự định sẽ hoàn thiện toàn bộ chức năng trước, sau đó mới dành thời gian tái cấu trúc những module độc lập có tiềm năng nâng cao hiệu suất.

Ghi Chú Phát Triển (22): Hệ Thống Túi Đồ

Chúng tôi đã hoàn thành cột mốc đầu tiên của dự án một cách tương đối thuận lợi. Các chức năng cơ bản như đăng ký và đăng nhập người dùng, di chuyển trong cảnh quan, các hành động cơ bản như chạy nhảy, kỹ năng tấn công phép thuật từ xa, hành vi đơn giản của quái vật và NPC đã được triển khai đầy đủ. Chúng tôi đã thử nghiệm tình huống hỗn chiến giữa hàng chục người chơi và hàng trăm NPC, hiệu suất vẫn khá mượt mà.

Ghi Chú Phát Triển (23): Từ Điển Nguyên Tử

Ghi chú phát triển (23): Từ điển nguyên tử

Vấn đề đã được nêu lên từ lâu. Trong Ghi chú phát triển 18, chúng tôi đã đề cập một yêu cầu: một trình ghi dữ liệu người chơi cần có khả năng sửa đổi hàng loạt các thuộc tính. Tuy nhiên, có thể đồng thời tồn tại các luồng khác đang đọc dữ liệu người chơi này (thông qua bộ nhớ chia sẻ), dẫn đến nguy cơ dữ liệu đọc được bị thiếu sót.

Ghi Chú Phát Triển (24): Chia Sẻ Dữ Liệu Giữa Các Lua State

Sau khi mở rộng quy mô làm việc gần đây, hiện tại chúng tôi có tổng cộng 10 lập trình viên đang tham gia vào dự án. Trong thời gian này, tôi tạm thời không cần phải phối hợp trực tiếp với các thành viên khác. Tuần vừa qua tôi tập trung tối ưu lại một số tính năng cũ, nâng cao hiệu năng mà không thay đổi giao diện, đồng thời hoàn thiện những chức năng còn dang dở để chuẩn bị cho việc mở rộng sau này.

Một Lỗi Bug Phát Sinh Khi Thiết Lập Hàm Callback Lua Trong C

Hệ thống server của chúng tôi cung cấp một giao diện lập trình bằng C, cho phép kích hoạt một hàm callback đã đăng ký trước khi xảy ra các cuộc gọi RPC. Thiết kế chuẩn cho cơ chế callback trong C thường bao gồm một con trỏ hàm và một con trỏ dữ liệu kiểu void*. Do logic trò chơi được viết bằng Lua, chúng tôi chỉ cần tạo một hàm C để kích hoạt hàm Lua tương ứng, và con trỏ dữ liệu void* lúc này chính là lua_State*.

Một Số Thay Đổi Trong Lua 5.2.1

Một sự thay đổi nhỏ trong Lua 5.2.1
Phiên bản chính thức của Lua 5.2.1 đã ra mắt được một thời gian. Mặc dù chỉ là bản cập nhật nhỏ so với 5.2.0, nhưng vẫn có vài điểm đáng chú ý.

Cụ thể, trong lần cập nhật này, kiểu dữ liệu chuỗi đã được phân thành hai loại: chuỗi dài và chuỗi ngắn. Các chuỗi dài (có độ dài vượt quá 40 byte) sẽ không còn bị “intern” nữa. Ban đầu tôi nghĩ đây là cải tiến nhỏ nhằm tối ưu hiệu năng, giúp giảm tính toán hash và chèn vào bảng băm trong các ứng dụng xử lý nhiều chuỗi. Tuy nhiên khi tìm hiểu kỹ hơn trên danh sách email của nhóm phát triển, tôi được biết đây thực chất là biện pháp tăng cường bảo mật, ngăn chặn kiểu tấn công gây tràn bộ nhớ thông qua việc tạo ra chuỗi gây va chạm hash (hash DoS). Cùng với đó, quá trình tính toán hash cho chuỗi cũng được thay đổi để sử dụng một giá trị khởi tạo ngẫu nhiên (random seed), giá trị này mặc định phụ thuộc vào thời gian hệ thống.

0%