serialization_minecraft

Crates.ioserialization_minecraft
lib.rsserialization_minecraft
version
sourcesrc
created_at2024-11-30 05:17:24.336361
updated_at2024-12-12 23:35:39.58055
descriptionencode and decode your struct
homepage
repositoryhttps://github.com/Bruce0203/serialization
max_upload_size
id1466310
Cargo.toml error:TOML parse error at line 21, column 1 | 21 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
(Bruce0203)

documentation

README

kotlinx.serialization was better than serde to me

"You cannot use serde for serialization or deserialization if you want to serialize an enum variant index as a varint, as serde_repr cannot fulfill the requirement for varint encoding."

원래 네트워크 프로토콜은 전부다 big 엔디안인데 이러면 little 엔디안인 ARM은 패킷 디코딩 인코딩 성능을 대략 0.0000000001% 정도 손해봅니다 . 하지만 잘 들여다보면요 프로토콜에 엔디안을 정해둬서 생기는 성능 감소는 이뿐만이 아니에요. 객체에 패딩이 없다고 가정하면 그 객체를 패킷 데이타로 인코딩 디코딩할 때 단순카피만 하면되는데 엔디안이 다르니까 객체의 필드 하나하나씩 쌓아나가듯이 인코딩 디코딩해야 되요. 게다가 문제가 하나 더 있는데 단순카피 연산을 할 때는 버퍼의 남은 바이트 수를 체크하는 작업을 한번만 하지만 객체의 필드를 하나씩 인코딩 디코딩하면 남은 바이트 수를 필드의 갯수만큼 체크하게 되버리죠. 반면에 네트워크 프로토콜에 엔디안을 강제하지 않으면 핸드쉐이크할 때 서버가 엔디안 정보를 전송하고 나서 패딩 없는 객체를 그대로 카피해서 보낼 수 있게 됩니다. 그래서 저는 아예 매크로로 저의 게임 서버 패킷은 전부다 대략 필드 2~3개당 0.1ns 이득봅니다^^

sandbox    fastest       │ slowest       │ median        │ mean         
├─ decode  2.013 ns      │ 9.097 ns      │ 2.096 ns      │ 2.093 ns     
╰─ encode  1.013 ns      │ 2.389 ns      │ 1.055 ns      │ 1.198 ns     


sandbox    fastest       │ slowest       │ median        │ mean         
├─ decode  1.888 ns      │ 15.8 ns       │ 1.972 ns      │ 1.978 ns     
╰─ encode  0.847 ns      │ 1.096 ns      │ 0.93 ns       │ 0.917 ns     
Commit count: 75

cargo fmt