yojimbo
Cap'n Proto
yojimbo | Cap'n Proto | |
---|---|---|
5 | 74 | |
2,586 | 12,278 | |
0.4% | 0.7% | |
6.8 | 9.1 | |
19 days ago | 6 days ago | |
C | C++ | |
BSD 3-clause "New" or "Revised" License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
yojimbo
-
Multiplayer Networking Solutions
yojimbo/ netcode/ reliable, all developped by Glenn Fidler, author of GafferOnGames
-
"Move all" feature added in inventory. In your face little fudsters. Gaming revolution incoming!
They really just didn't know how to go about building a complex online game or what that entails. At one point they were trying to donate to open source networking projects that were still in development and not production-ready in hopes they'd help them make their game, you'll see them listed as sponsors of yojimbo for example. It was bizarre to watch.
-
Handling acks during 1+ second packet loss with Glenn Fiedler's Reliable UDP Solution
I can't remember exactly how best to handle this (Glenn's yojimbo project is probably your best bet for a concrete implementation), but here's an idea: buffer and ACK some packets (e.g. up to N packets following your missing packet) and discard everything else (without ACK) until the missing one shows up. The protocol will then continuously try to send your missing packet, in addition to the packets you've intentionally not ACK'd. Once the missing packet shows up you can process it and any buffered packets up to your next missing packet and repeat.
-
I need a good and simple networking library for C++
You may want to take a look at yojimbo , looks like it will fit your requirements pretty well.
-
Programming question : Which techniques are used to achieve real-time between players in online openworlds ? (think wow, ff14, teso)
And has his own C++ library for transmitting messages over UDP protocol https://github.com/networkprotocol/yojimbo
Cap'n Proto
-
Rust in the Linux kernel: part 2
My interest in Rust comes from getting frustrated with C's type system. Rust has such a nice type system and I really enjoy the ownership semantics around concurrency. I think that C++ written "correctly" looks a lot like Rust and libkj [1] encourages this, but it is not enforced by the language.
[1] https://github.com/capnproto/capnproto/blob/v2/kjdoc/tour.md
-
Writing your own C++ standard library part 2
Have you seen libkj [1]? I've used it and really enjoy working with it. It has a rust-like owned pointer and the whole library uses these smart pointers.
It has proper container classes based on B-trees and its also got an async runtime.
[1] https://github.com/capnproto/capnproto/blob/v2/kjdoc/index.m...
- The first year of free-threaded Python – Labs
- Ask HN: Which Opens Source Software have the sexiest code?
-
Begrudgingly Choosing CBOR over MessagePack
Just curious if you considered Cap'n Proto as another option, or if it wasn't in the running?
[1] https://capnproto.org/
- Cap'n Proto: High-Performance Serialization and RPC for Modern C++
- The Simdjson Library
-
Demystifying the Protobuf Wire Format
To be fair, if that's what you need ProtoBuf isn't the only option. Cap'n Proto[1], JSON Schema[2], or any other well supported message-definition language could probably achieve that as well, each with their own positives and negatives.
[1]: https://capnproto.org/
[2]: https://json-schema.org/
-
Mysterious Moving Pointers
Yeah I pretty much only use my own alternate container implementations (from KJ[0]), which avoid these footguns, but the result is everyone complains our project is written in Kenton-Language rather than C++ and there's no Stack Overflow for it and we can't hire engineers who know how to write it... oops.
[0] https://github.com/capnproto/capnproto/blob/v2/kjdoc/tour.md
-
Show HN: Comprehensive inter-process communication (IPC) toolkit in modern C++
- may massively reduce the latency involved.
Those sharing Cap'n Proto-encoded data may have particular interest. Cap'n Proto (https://capnproto.org) is fantastic at its core task - in-place serialization with zero-copy - and we wanted to make the IPC (inter-process communication) involving capnp-serialized messages be zero-copy, end-to-end.
That said, we paid equal attention to other varieties of payload; it's not limited to capnp-encoded messages. For example there is painless (<-- I hope!) zero-copy transmission of arbitrary combinations of STL-compliant native C++ data structures.
To help determine whether Flow-IPC is relevant to you we wrote an intro blog post. It works through an example, summarizes the available features, and has some performance results. https://www.linode.com/blog/open-source/flow-ipc-introductio...
Of course there's nothing wrong with going straight to the GitHub link and getting into the README and docs.
Currently Flow-IPC is for Linux. (macOS/ARM64 and Windows support could follow soon, depending on demand/contributions.)
What are some alternatives?
ENet-CSharp - Reliable UDP networking library
gRPC - C++ based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
bitproto - The bit level data interchange format for serializing data structures (long term maintenance).
ZeroMQ - ZeroMQ core engine in C++, implements ZMTP/3.1
netcode.io - Secure client/server connections over UDP
FlatBuffers - FlatBuffers: Memory Efficient Serialization Library