kayakhttp / kayak Goto Github PK
View Code? Open in Web Editor NEWevent-driven networking library for .NET
License: MIT License
event-driven networking library for .NET
License: MIT License
The following environment keys marked as required in the OWIN spec http://owin.org/spec.html#EnvironmentDictionary are missing:
owin.RequestPath
owin.RequestPathBase
owin.RequestQueryString
owin.RequestScheme
owin.Version
Supports pipelining requests and reusing open connections.
ep.GetHttpConnection(c => {
connection.OnRequest(head, body, responseDelegate);
});
This makes me think:
When writes are made during a single iteration of the runloop, the socket implementation should combine them into a single packet. In other words, writes are deferred until the end of the loop and always re-buffered or use scatter/gather APIs.
This is so that user can control pipelining of requests. Very nice also in the outgoing message queue because headers and synchronous bodies are condensed into a single packet.
atm it keeps it open till the client does, but some clients wait for the final close to consider it "Done".
Assembly should have a strong name.
Seems some Unixes (OS X at least) don't automatically reclaim ports a process was listening on when that process dies but doesn't unbind the listening socket. Causes "The address was already in use" errors on subsequent runs.
I've read an article about kayak (http://dotnetslackers.com/articles/aspnet/The-Kayak-Framework-An-easy-way-to-speak-HTTP-with-NET.aspx), but now the API seems to be chanced.
Is this article about a previous version or am I missing some dependencies?
Regards,
Giacomo
As a practical matter I suspect that all GET requests should be treated as if Content-Length:0 were automatically implied. Watch what happens when you curl or wget from a kayak server. Kayak doesn't realize that the request is complete. cf the /echo case in the sample program.
Either that or the /echo sample should be modified not to read from the request's body if the request is a GET.
OTOH, http://tech.groups.yahoo.com/group/rest-discuss/message/9962
When I run rake it tries to download NUnit package; the response is a redirect but Net::HTTP doesn't follow those. I had to hack the Rakefile not to delete old files, and download and extract NUnit manually.
On my Debian system I have NUnit installed as a separate package anyway...
If you dare.
Hi Benjamin,
firstly, thanks for your work on Kayak - it is looking really promising.
I think I may have come across a bug in Kayak 0.6.2. A application demonstrating the issue can be found here: https://github.com/kjohnphillip/KayakIssue.
It appears from some early investigation, that KayakServer.AcceptNext() is not behaving consistently across requests. The log file (https://github.com/kjohnphillip/KayakIssue/blob/master/log.txt) shows the output from Kayak when making repeated requests to http://127.0.0.1.
You will see from the log, that on startup 2 requests are completed successfully, the 3rd then fails and then every other request succeeds. Only request 1 is followed immediately by another successful request and the log for request 1 is different to the log for every other successful request.
My environment is mono 2.10.2 on Ubuntu 10.10 (64bit).
Regards,
Kevin
When I download and try to compile Kayak in Visual Studio then the HttpParser.cs and IHttpParserDelegate.cs file is missing.
I've been trying to get kayak working but I must be misunderstanding something. My assumption is that once I launch a simple server I could use a web browser at localhost to see the results, but this isn't working. What am I missing?
Submodules might be the way to go here. Build script automatically keeps it up to date based on a version/commit variable. Add the files to the Kayak solution or ILMerge the resulting binary.
Probably HttpMachine on NuGet is overkill.
Will NuGet work on Mono? Or must we pollute the repo with compiled dependencies?
Automatically encode when Transfer-Encoding: chunked
exists in outgoing message, automatically decodes when Transfer-Encoding: chunked
exists in an incoming message (should be implemented in the parser).
git clone https://github.com/kayak/kayak.git
generates...
Initialized empty Git repository in d:/Development/Projects/git/kayak/.git/
error: The requested URL returned error: 403 while accessing https://github.com/
kayak/kayak.git/info/refs
fatal: HTTP request failed
It opens and then says "connecting..." followed quickly by "not connected" in the top right.
I've deleted the AppData
folder and re-logged-in and it has the same behavior.
A quick inspection of Kayak.Http.DataSubject source seems to suggest it has threading issues. For instance, Connect and OnError, which are called by different threads, are written as if channel and error properties were locked together, but they aren't.
Am I missing something here? And if not, is all the Kayak code written in the same way? If so, a wholesale thread safety audit might be in order.
In the OWIN specification related to the environment dictionary http://owin.org/spec.html#EnvironmentDictionary it lists keys as: "owin." and in the implementation they're spelled "Owin." and the dictionary key comparison is case sensitive.
Perhaps a job for Ragel, if it supports binary grammars?
Probably easy to bolt onto a SSL/TLS API.
I tried compiling your code and I get these errors:
Error CS2001: Source file '..\lib\httpmachine\src\HttpMachine\HttpParser.cs' could not be found
Error CS2001: Source file '..\lib\httpmachine\src\HttpMachine\IHttpParserDelegate.cs' could not be found
Hi Ben,
I've had a scan through the code-base and it looks like Kayak's support is mostly async which I can understand from a perf/scalability POV. Just wanted to know if you intend to make palatable for sync logic, i.e. the Request has already been parsed and the sync code block is allowed to make blocking db/io calls without blocking the server.
OpenSSL looks like a steaming pile. What other options have we?
How to compile on Windows please ?
Can we have libEVent as a compiles binary for windows and for linus ?
It would be nice if this nuget package was ported to .Net Standard or .Net core. I do not think any breaking changes are needed for the transfer. I can assist if needed
Probably also need to look at when/if the request body subject should be set to null.
When attempting to build from rake as described on the README.md I get the following error :
Cloning into lib/httpmachine...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Clone of '[email protected]:bvanderveen/httpmachine.git' into submodule path 'lib/httpmachine' failed
It also failed when I tried replacing the url in .gitmodules by https://github.com/bvanderveen/httpmachine.git.
EDIT : I forgot to edit .config in .git to change the submodule url there to https://github.com/kayak/kayak.git
That made it give a different error message :
fatal: reference is not a tree: 5747f5e34db18a5461581728d3618b5c3599a4d3
Unable to checkout '5747f5e34db18a5461581728d3618b5c3599a4d3' in submodule path 'lib/httpmachine'
For some reason I still have issues with the rake file, however I was able to init and update the submodule though git bash
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.