mirror of https://github.com/Askill/r_place.git
not runnable due to timeout with too many clients
This commit is contained in:
parent
662340f5f7
commit
7be7496944
39
go/server.go
39
go/server.go
|
|
@ -5,6 +5,7 @@ import (
|
|||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
|
|
@ -15,17 +16,18 @@ var upgrader = websocket.Upgrader{
|
|||
WriteBufferSize: 2048,
|
||||
}
|
||||
var img = GetImage(10, 10)
|
||||
var tmpImage = GetImage(img.width, img.height)
|
||||
|
||||
func write(ticker time.Ticker, c websocket.Conn) {
|
||||
func write(ticker time.Ticker, c *websocket.Conn, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
var tmpImage = GetImage(img.width, img.height)
|
||||
for range ticker.C {
|
||||
diff := tmpImage.GetDiff(&img)
|
||||
for i := 0; i < int(diff.Width*diff.Height); i++ {
|
||||
pix := diff.Pixels[i]
|
||||
if pix.UserID != 0 {
|
||||
x := i / int(diff.Width)
|
||||
y := i % int(diff.Height)
|
||||
msg := Message{X: uint16(x), Y: uint16(y), Timestamp: pix.Timestamp, UserID: pix.UserID, Color: pix.Color}
|
||||
x := uint16(i / int(diff.Width))
|
||||
y := uint16(i % int(diff.Height))
|
||||
msg := Message{X: x, Y: y, Timestamp: pix.Timestamp, UserID: pix.UserID, Color: pix.Color}
|
||||
marshalMsg, err := json.Marshal(msg)
|
||||
if err != nil {
|
||||
log.Println("error while writing image", err)
|
||||
|
|
@ -38,15 +40,8 @@ func write(ticker time.Ticker, c websocket.Conn) {
|
|||
}
|
||||
}
|
||||
|
||||
func serve(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("error while upgrading", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
go write(*ticker, *c)
|
||||
func read(c *websocket.Conn, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
for {
|
||||
_, msg, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
|
|
@ -58,7 +53,23 @@ func serve(w http.ResponseWriter, r *http.Request) {
|
|||
message.JsonToStruct(msg)
|
||||
img.SetPixel(message)
|
||||
}
|
||||
}
|
||||
|
||||
func serve(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("error while upgrading", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
var wg sync.WaitGroup
|
||||
|
||||
// end fucntion if either of the 2 functions is done
|
||||
wg.Add(1)
|
||||
go write(*ticker, c, &wg)
|
||||
go read(c, &wg)
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
|
|
|||
|
|
@ -19,10 +19,9 @@ class pixel:
|
|||
timestamp: int
|
||||
userid: int
|
||||
|
||||
|
||||
async def main():
|
||||
async def sender():
|
||||
async with websockets.connect("ws://localhost:8080/") as websocket:
|
||||
for _ in range(10):
|
||||
while True:
|
||||
message = pixel(
|
||||
x=random.randint(0, 9),
|
||||
y=random.randint(0, 9),
|
||||
|
|
@ -30,12 +29,21 @@ async def main():
|
|||
timestamp=int(time.time()),
|
||||
userid=1,
|
||||
)
|
||||
print(message)
|
||||
await websocket.send(json.dumps(message.__dict__))
|
||||
while True:
|
||||
x = await websocket.recv()
|
||||
print(x)
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
async def client():
|
||||
async with websockets.connect("ws://localhost:8080/") as websocket:
|
||||
i= 0
|
||||
while True:
|
||||
i+=1
|
||||
x = await websocket.recv()
|
||||
print(i, pixel(**json.loads(x)))
|
||||
|
||||
async def main():
|
||||
coros = [sender() for _ in range(100)]
|
||||
coros.append(client())
|
||||
returns = await asyncio.gather(*coros)
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.get_event_loop().run_until_complete(main())
|
||||
|
|
|
|||
Loading…
Reference in New Issue