I have also experimented with protocols. I am currently focusing on
gRPC/Protobuf/HTTP2[1] solutions.I built some code around FlatBuffers[2]
but I came to the conclusion that the 'control plain' part of VR protocols
does not use the no-copy feature of FlatBuffers (big things like meshes and
images go by HTTP or other protocols) and that the FlatBuffer data
structures leak into a lot of the app because of now the message data is
stored. The other advantage of Protobuf over Flatbuffer is the wider
language and implementation support.

Implementing a complete protocol in a region module requires identifying
all the correct events from the simulator core. A long term goal (mentioned
in Diva's presentation) is removing the LL protocol implementation from the
simulator core. I'm willing to do what I can to move protocols out of the
core and into modules.

== mb

[1]: https://grpc.io/
[2]: https://google.github.io/flatbuffers/

On Sat, Dec 15, 2018 at 5:23 PM Dahlia Trimble <dahliatrim...@gmail.com>
wrote:

> Hi Diva/all,
>
> I'm happy to see some interest in this new viewer project. I have my own
> viewer projects which I wish to continue focusing on but I'd like to offer
> to share some notes on some of the approaches I'm using regarding network
> stacks.
>
> First: protocols. I'm using Websockets for scene updates and HTTP for asset
> transfers. Websockets are message-oriented and provide a convenient means
> of sending variable length messages between endpoints with little
> additional support code needed. My primary reasoning for choosing
> Websockets at this time is to support browser-based viewers. I've also
> developed a custom UDP protocol but with the success I've had with
> Websockets I've let that protocol succomb to some bit rot and it's probably
> broken at this point. I've looked several times at WebRTC but it seems to
> be primarily a peer-to-peer protocol and it's developers don't seem
> interested in providing means for non-prowsers to act as peers. I've seen a
> few attempts in the past to create server peer support libraries but I've
> not (yet) found any I would consider worthy of building a production
> protocol on top of. It's been nearly a year since I've researched this and
> it's possible something has changed but for now Websockets seem to be
> working quite well.
>
> I'm using both a region module approach and a proxy approach. The region
> module seems to have the better user experience in terms of movement and
> action lag but the proxy approach allows me to connect to any grid,
> including SL, and also teleport across the Hypergrid. Both approaches seem
> to have merit and I tend to keep them in sync development-wise. The region
> module makes heavy use of EventManager events and for any events I may need
> which aren't currently available, the module will poll some data structures
> in scene on a Heartbeat End event. This isn't the approach I'd like and it
> would be better to have all events available but I thought I'd complete the
> protocol before submitting any possible pull requests or patches to core.
> Another issue with the region module approach is it doesn't work well with
> grid services and managing grid presences. I remember Teravus made a few
> commits long ago to enable some new login and presence creation methods but
> I'm not sure they still exist. He also added some Websocket support to the
> HTTP server library but I believe it's been removed or broken in recent
> commits. I'm currently using the Fleck library for Websockets. I also have
> an asset conversion and serving capability in my region module which serves
> images, animations, meshes, terrain, and the like and this functionality is
> mirrored in my proxy version. I haven't addressed inventory yet in either
> version. I have some crude region crossing code in my region module but
> it's a rather kludgy workaround and I'll likely remove it. This is another
> area that needs to be worked out with grid services.
>
> I know I've discussed these approaches in IRC in the past and if anyone is
> interested I'm willing to share experiences, ideas, and notes. If I see
> sufficient commonality between our projects I may be willing to collaborate
> on some aspects of a network stack.  I should also mention that Mic Bowman
> did a lot of similar work with accessing Scene state over a network via a
> custom region module and he might be able to provide some useful insights.
>
> I wish all the best of luck with this project! I've had a lot of fun and
> I've learned a lot trying to interface various game engines to
> OpenSimulator in the past and while I lack experience with Unreal and
> cannot reasonably predict anyone's success, I am confident that at minimum
> it will be a valuable learning experience for all involved.
>
> -Dahlia
>
> On Sat, Dec 15, 2018 at 8:19 AM Diva Canto <d...@metaverseink.com> wrote:
>
> > Parts of my wish list can, of course, be done without a new viewer,
> > simply by evolving the current Linden-based viewers. The network stack
> > is an obvious one.
> >
> > If the current viewer developers and more server-side developers want to
> > cooperate on a new network stack that is secure and goes through
> > firewalls, that's a big +1 from me, independent of any other more
> > ambitious projects that I'm personally more interested in.
> >
> > The way OpenSim is architected, this can (and should) be done outside of
> > the core code, simply by developing region modules and/or plugins. Once
> > that stack is a bit more solid, if it works well, we'll certainly
> > consider bringing those modules to core. Stuff like that, if it works
> > well, would be very valuable! And really, it *must* be developed as
> > modules, without touching the core code of the OpenSim framework. That's
> > how I would do it myself, and that's how it can be accepted for
> inclusion.
> >
> > Here is a presentation I wrote a few years ago, as a means to explain
> > myself the architecture of OpenSim:
> > https://www.ics.uci.edu/~lopes/opensim/OpenSim-Sep-15.pdf
> > Please look starting at page 9 and, in particular, pages 17-19, where I
> > have pictures of how to write new client stacks.
> >
> > I encourage everyone who wants to embark on this to bring the
> > conversations to opensim-dev. There's a lot of knowledge there about how
> > to do stuff like that in a way that preserves the architecture of
> OpenSim.
> >
> > The private conversations we have been having are about the more
> > ambitious vision, not about any particular part of OpenSim, which, at
> > this point, is sufficiently flexible to support all sorts of
> > evolutionary extensions. A new network stack is one of those.
> > +1 on that!
> >
> >
> > On 12/15/2018 6:09 AM, Mike Dickson wrote:
> > > I'd be willing to look at a UDP replacement + continuing to move things
> > that should be out of the simulator to CAPS.  I've been working on
> cutting
> > over my OpenSim tree to LibreMetaverse to take advantage of the buffer
> > pools that were added w/Halcyon so it could be done there and ride along
> > side UDP until things were ready.  The eventing model inside OpenSIm also
> > needs work to support this IMO, the current mechanism is far too fragile
> > and error prone.
> > >
> > > This feels far more promising if there is working being contemplated
> > than focusing on the VR elements.
> > >
> > > Cinder I'll drop you a note with a few more thoughts but I'd be willing
> > to work on this. Not in core of course since I'm not in it and therefore
> > not aware of other "conversations" taking place.   Happy to help
> > nonetheless and I can fit something like this in with the rest of the
> > "fixing" I'm doing with OpenSim.
> > >
> > > Mike
> > >
> > > -----Original Message-----
> > > From: opensim-dev-boun...@opensimulator.org <
> > opensim-dev-boun...@opensimulator.org> On Behalf Of Cinder Roxley
> > > Sent: Saturday, December 15, 2018 8:08 AM
> > > To: opensim-dev@opensimulator.org
> > > Subject: Re: [Opensim-dev] Unreal viewer: summoning the coders
> > >
> > > On December 15, 2018 at 6:33:13 AM, Ai Austin (ai.ai.aus...@gmail.com)
> > > wrote:
> > >
> > > f) Running an app launched via a browser is much more common now and we
> > already have that with secondlife:// and hop:// protocols - which NEARLY
> > work as expected and would not need much to fix them working everywhere.
> > >
> > > For all intents and purposes, hop:// has been abandoned. While I admit,
> > it’s much friendlier looking than x-grid-info://, x-grid-info:// complies
> > with BCP 35 and the URL Living Standard.
> > >
> > > Exceptions that still need a little fix are on the Firestorm JIRA (e.g.
> > grid change on teleport rather grid string for hops staying as home
> grid).
> > That, to me, would be more worthwhile than starting a whole new viewer
> > track.
> > >
> > > This is due to the way hypergrid works. When you teleport, you aren’t
> > leaving your grid, rather, the destination region is linked to your grid.
> > > However, my solution to this in x-grid-info:// reference source was to
> > use the OpenSimExtras cap to grok a grid uri from the region the agent is
> > connected to. This works universally in OpenSim 0.8.x and onward besides
> > OSGrid where OpenSimExtras doesn’t contain Bluewall’s most recent
> additions
> > to it.
> > >
> > > As far as Unreal goes, I wouldn’t be caught in the royalty payments
> mess
> > that all entails.
> > >
> > > However, I would love to collaborate on a replacement for LLUDP if
> > anyone is interested in that. Something like FlatBuffer (and FlatBuffer
> > over WebRTC on mobile) would make for a good replacement. It would also
> be
> > a step towards some of the silly limitations LLUDP has forced on
> > OpenSimulator, like the 254 entity limit on terse object updates.
> > > _______________________________________________
> > > Opensim-dev mailing list
> > > Opensim-dev@opensimulator.org
> > > http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
> > >
> > > _______________________________________________
> > > Opensim-dev mailing list
> > > Opensim-dev@opensimulator.org
> > > http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
> > >
> >
> > _______________________________________________
> > Opensim-dev mailing list
> > Opensim-dev@opensimulator.org
> > http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
> >
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev@opensimulator.org
> http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
>
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

Reply via email to