Skip to content
This repository was archived by the owner on Dec 18, 2018. It is now read-only.
This repository was archived by the owner on Dec 18, 2018. It is now read-only.

Transport agnostic kestrel refactoring #828

@davidfowl

Description

@davidfowl

We want to allow a future where it is possible to use different transports:

image

We'll want to look at RIO, and PacketDirect (on windows) and libuv and .NET sockets.

SocketInput is a bit of a misnomer, it's really just a linked list of memory pool blocks that can be iterated using the MemoryPoolIterator.

Changes:

  • - Introduce ITransport interface that lives on KestrelServerOptions
  • - Decouple connection filters from libuv connection
  • - Rename Libuv related code into Libuv* named classes (Connection etc)
  • - Remove FrameContext from Frame inheritance hierarchy
  • - Remove FrameFactory from ServiceContext
  • - Refactor SocketInput
    • - Rename SocketInput to BufferChannel (or a better name if we come up with one)
    • - Introduce IWriteableBufferChannel and IReadableBufferChannel interfaces
  • - Remove IConnectionControl
  • - Change Frame to use IWriteableBufferChannel for output and IReadableBufferChannel for input.
  • - Make transport and connection filter consume and produce into IWriteableBufferChannel and IReadableBufferChannel

/cc @benaadams

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions