Created
October 6, 2019 13:10
-
-
Save dadleyy/596a47d8b7bc3ee890c7ba602f9e5aca to your computer and use it in GitHub Desktop.
basic http rust & go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import "fmt" | |
import "net/http" | |
type handle struct { | |
} | |
func (h *handle) ServeHTTP(response http.ResponseWriter, request *http.Request) { | |
header := response.Header() | |
header.Add("X-REQUEST-LINE", fmt.Sprintf("%s %s", request.Method, request.RequestURI)) | |
response.WriteHeader(200) | |
fmt.Fprintf(response, "hello world\r\n") | |
} | |
func main() { | |
h := handle{} | |
http.ListenAndServe("0.0.0.0:4245", &h) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::io::prelude::*; | |
use std::io::BufReader; | |
use std::io::Result as StdResult; | |
use std::net::{Shutdown, TcpListener, TcpStream}; | |
use std::thread::spawn; | |
const PAYLOAD: [u8; 11] = *b"hello world"; | |
fn resolve(mut stream: TcpStream) -> StdResult<()> { | |
let mut lines = BufReader::new(&stream).lines(); | |
let request_line = lines | |
.nth(0) | |
.ok_or(std::io::Error::from(std::io::ErrorKind::InvalidInput))?; | |
stream.write(b"HTTP/1.1 200 OK\r\n")?; | |
stream.write(format!("X-REQUEST-LINE: {:?}\r\n", request_line).as_bytes())?; | |
stream.write(format!("Content-Length: {:?}\r\n", PAYLOAD.len() + 2).as_bytes())?; | |
stream.write(b"\r\n")?; | |
stream.write(&PAYLOAD)?; | |
stream.write(b"\r\n")?; | |
return stream.shutdown(Shutdown::Both); | |
} | |
fn main() -> StdResult<()> { | |
let listener = TcpListener::bind("0.0.0.0:4244"); | |
if let Ok(listener) = listener { | |
for stream in listener.incoming() { | |
if let Ok(stream) = stream { | |
spawn(move || resolve(stream)); | |
} | |
} | |
} | |
Ok(()) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment