Skip to content

Commit a9716e9

Browse files
author
Michael Hoisie
committed
Added initial streaming server prototype
1 parent 9009d40 commit a9716e9

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ format:
2323
${GOFMT} -w scgi.go
2424
${GOFMT} -w servefile.go
2525
${GOFMT} -w status.go
26+
${GOFMT} -w streaming.go
2627
${GOFMT} -w web.go
2728
${GOFMT} -w web_test.go
2829
${GOFMT} -w examples/hello.go

streaming.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package main
2+
3+
import (
4+
"http"
5+
"net"
6+
"os"
7+
"time"
8+
)
9+
10+
type Server struct {
11+
addr string
12+
}
13+
14+
func (s *Server) handleRequest(req *http.Request) (*http.Response, os.Error) {
15+
resp := http.Response{
16+
StatusCode: 200,
17+
RequestMethod: req.Method,
18+
ProtoMajor: 1,
19+
ProtoMinor: 1,
20+
Close: false,
21+
}
22+
23+
return &resp, nil
24+
}
25+
26+
func (s *Server) handleConn(conn net.Conn) {
27+
for {
28+
sc := http.NewServerConn(conn, nil)
29+
req, err := sc.Read()
30+
if err != nil {
31+
println("read error", err.String())
32+
break
33+
}
34+
resp, err := s.handleRequest(req)
35+
if err != nil {
36+
println("handle error", err.String())
37+
break
38+
}
39+
40+
err = sc.Write(resp)
41+
if err != nil {
42+
println("write error", err.String())
43+
break
44+
}
45+
46+
for {
47+
conn.Write([]byte("hello\n"))
48+
time.Sleep(5e9)
49+
}
50+
}
51+
}
52+
53+
func (s *Server) Serve(l net.Listener) os.Error {
54+
for {
55+
conn, e := l.Accept()
56+
if e != nil {
57+
return e
58+
}
59+
60+
go s.handleConn(conn)
61+
}
62+
panic("not reached")
63+
}
64+
65+
func (s *Server) Run(addr string) os.Error {
66+
l, e := net.Listen("tcp", addr)
67+
if e != nil {
68+
return e
69+
}
70+
e = s.Serve(l)
71+
l.Close()
72+
return e
73+
}
74+
75+
func main() {
76+
var server Server
77+
server.Run("127.0.0.1:9999")
78+
<-make(chan int)
79+
}

0 commit comments

Comments
 (0)