nói dối e blog

Cải Tiến Dịch Vụ Gate Trên Skynet

Do những lý do lịch sử, dịch vụ gate trong skynet ban đầu được viết bằng C như một dịch vụ độc lập. Khi skynet tích hợp mô-đun quản lý socket vào nhân hệ thống, gate đã trải qua một lần tái cấu trúc sử dụng API socket mới. Hiện nay, khi nền tảng skynet ngày càng hoàn thiện và định hình phát triển theo hướng ngôn ngữ Lua làm chủ đạo, đã đến lúc tiến hành viết lại hoàn toàn dịch vụ này bằng Lua.

Giải Pháp Đa Điểm Mới Trong Skynet

Gần đây tôi đang phát triển phiên bản 0.2 của skynet. Tính năng nổi bật nhất trong lần cập nhật này là phần thiết kế lại mô-đun phát đa điểm (multicast).

Trong quá trình phát triển skynet, mô-đun phát đa điểm đã tồn tại dưới nhiều hình thức khác nhau. Tuy nhiên trước khi phát hành phiên bản 0.1, nó đã bị loại bỏ khỏi mã nguồn chính. Lý do là bởi vì tôi muốn giữ cho các thành phần ở tầng lõi của hệ thống được gọn nhẹ, không tích hợp các chức năng có tính chuyên biệt cao như thế này.

Giới Thiệu Về Lua-Conf: Cơ Chế Chia Sẻ Thông Tin Cấu Hình Giữa Các Máy Ảo Lua

Trong các dự án phát triển trò chơi trực tuyến, chúng ta thường xuyên gặp phải tình trạng phải xử lý hàng loạt bảng cấu hình khổng lồ. Do chủ yếu sử dụng Lua làm ngôn ngữ lập trình chính, cách tiếp cận tự nhiên là lưu trữ các hằng số cấu hình trong các bảng Lua. Tuy nhiên, phương pháp này gặp phải hai vấn đề lớn khi quy mô dữ liệu tăng lên:

Gọi API Lua Đảm Bảo an Toàn Bộ Nhớ

Thiết kế API của Lua được thực hiện một cách tinh tế, toàn bộ thư viện lõi đều ủy thác việc quản lý bộ nhớ cho hàm lua_Alloc do người dùng cung cấp. Bất cứ khi nào xảy ra tình trạng thiếu bộ nhớ, các API của Lua đều có khả năng xử lý ngoại lệ một cách chính xác.

Hãy xem xét các hàm API như lua_newtable hay lua_pushlstring - những hàm này đều yêu cầu tạo ra các đối tượng gc mới. Vậy nếu lua_Alloc không thể cấp phát bộ nhớ trong những trường hợp này thì sao? Đặc biệt các hàm này lại không có giá trị trả về!

Khung Snax Và Giải Pháp Cập Nhật Nóng Trong Skynet

Hiện tại, các API của skynet được thiết kế ở mức tương đối底层. Do một số nguyên nhân lịch sử, một số API có cách thiết kế khá kỳ lạ (ví dụ: skynet.ret không tự động đóng gói dữ liệu trả về).

Tôi muốn xây dựng một bộ API đơn giản hơn cho những tình huống ứng dụng phổ biến nhất. Nếu tuân theo các mẫu cố định khi xây dựng dịch vụ nội bộ skynet, công việc sẽ trở nên dễ dàng hơn nhiều. Đây chính là mô-đun snax mà tôi vừa hoàn thiện trong hai ngày qua. Hiện tại, tôi đã đẩy nó lên nhánh snax trên GitHub. Nếu không phát sinh vấn đề nghiêm trọng, nó sẽ được hợp nhất vào nhánh chính.

Skynet Công Bố Phiên Bản Chính Thức Đầu Tiên

Kể từ ngày dự án Skynet được công bố mã nguồn mở đã hơn 20 tháng, nếu tính từ giai đoạn phát triển nội bộ thì thời gian này lên tới hơn 30 tháng. Hiện tại tại công ty chúng tôi, Skynet đã được áp dụng trong 5 dự án khác nhau, và theo thông tin nắm bắt được thì ít nhất đã có 2 dự án bên ngoài công ty đang sử dụng Skynet ổn định trong một khoảng thời gian dài. Đây chính là thời điểm thích hợp để ra mắt phiên bản chính thức đầu tiên của dự án.

0%