Lots of work at work, so not as much time for projects.
Smattering of thoughts:
- Godot doesn't really seem ready for prime-time with c# yet. Not bad, and we will keep and eye on it. I'll try to make my libraries in a way that theoretically we could make them agnostic to the engine (probably biggest issue there will be the way the engine does mesh representation), and hopefully as little code as possible on the engine side.
- Keeping a close eye on wasmer/wasmtime. I think I will still need wasmer, since it is .netstandard 2.0. The Wasmtime restriction to .netstandard 2.1 is a problem with unity (and probably godot). Though I can run the emissaries as separate processes, I think I want to do that later. Let's get it working before we go too crazy with a 'scale out' plan, just not preclude ourselves from going that way. I have very little time to code, so have to make a bee-line to functionality. We will probably revisit this when Unity changes their .net model, to .net core or possible .net 5 (the .net version to rule them all). Both of these projects are ticking a long. I still find wasmer's WAPM projects a powerful missing link, though version pinning and signed downloads of external code would have to happen.
- Starting to look at some naked-codeless emissaries, which just have content in them. It's one option for the emissary, just to hold objects, or to hold references to objects. I'm refactoring the ldraw code so I can just put lego entities in. Later these can indirect to an URL rather than needing to be in the emissary--though they will have to match a full checksum when they download--they will then be able to be proxy signed. Looking at getting an STL loader too. Then some work on a universal (protobuf based) mesh format.
- Very intrigued by Kafka. I think log based messages might be a giant win over Rabbit/AMQP style pub/sub. The use-case is that the world server can simply make every client a producer and everyone can be a consumer to see their scenes change. The interesting thing is that perhaps, if you don't have a complete cache of the scene, you can then traverse the log in the reverse direction back to a fixed low-water mark (which represents having every entity having presented it's status in the log at least once), fully recapitulating the status of the scene. You have to traverse it backwards since a given entity might report many times, and you don't want to have the scene be remade in order. Physics will have to be suspended during the repaint. Also, if you mark each status with the timestamp of the last previous change, you can make a hash to ignore all but the last status report of every entity (and not have to keep inactive entities in your hash -- if their last-changed is back before the low-water mark. Also Kafka messages can be done in protobuf (a supported standard). World server will still need a database to track everything. Might be easier than the redis idea. Have to experiment. I need a skeleton world server. I'm building a Kafka server to try out.
- These log based systems like Kafka (and really like the mongo oplog) are intriguing. I'm thinking of a way to do the image and mesh caches that use this, where they use a given number of fixed length cache files (likely memory mapped), and the oldest one times out and causes the oldest cached entries to be reloaded into a real file. This doesn't fix evacuating trivial files or keeping core-files which are constantly used. Trivial files of course will fall out when the logs get rotated. It's a very powerful scheme for keeping high-integrity databases without needed to do wild random access during setup, or any need to do garbage collection.
No comments:
Post a Comment