Created
August 26, 2011 23:37
-
-
Save justinfx/1174699 to your computer and use it in GitHub Desktop.
go-socket.io stress_test
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 socketio | |
import ( | |
"testing" | |
"os" | |
"flag" | |
"strconv" | |
"sync" | |
"fmt" | |
"http" | |
"time" | |
) | |
const ( | |
SERVER_ADDR = "localhost" | |
PORT = "9999" | |
NUM_MESSAGES = 10000 | |
) | |
func startServer(t *testing.T) { | |
config := DefaultConfig | |
config.QueueLength = 1000 | |
config.ReconnectTimeout = 1e6 | |
config.Origins = []string{"*"} | |
server := NewSocketIO(&config) | |
server.OnMessage(func(c *Conn, msg Message) { | |
if err := c.Send(msg.Data()); err != nil { | |
t.Logf("server echo send error: ", err) | |
} | |
}) | |
go func() { | |
http.ListenAndServe(fmt.Sprintf("%s:%s", SERVER_ADDR, PORT), server.ServeMux()) | |
}() | |
} | |
func TestStressTest(t *testing.T) { | |
clients := 1 | |
passes := 1 | |
msg_size := 150 // bytes | |
numMessages := NUM_MESSAGES | |
serverAddr := fmt.Sprintf("%s:%s", SERVER_ADDR, PORT) | |
flag.Parse() | |
if len(flag.Args()) > 0 { | |
serverAddr = flag.Arg(0) | |
} | |
if v, err := strconv.Atoi(flag.Arg(1)); err == nil { | |
passes = v | |
} | |
if v, err := strconv.Atoi(flag.Arg(2)); err == nil { | |
clients = v | |
} | |
if v, err := strconv.Atoi(flag.Arg(3)); err == nil { | |
if v > msg_size { | |
msg_size = v | |
} | |
} | |
if clients > 1 { | |
t.Logf("\nTest starting with %d parallel clients...", clients) | |
} | |
startServer(t) | |
time.Sleep(1e9) | |
//msg := bytes.Repeat([]byte("X"), msg_size) | |
for iters := 0; iters < passes; iters++ { | |
t.Log("Starting pass", iters) | |
clientDisconnect := new(sync.WaitGroup) | |
clientDisconnect.Add(clients) | |
for i := 0; i < clients; i++ { | |
go func() { | |
clientMessage := make(chan Message) | |
client := NewWebsocketClient(SIOCodec{}) | |
client.OnMessage(func(msg Message) { | |
clientMessage <- msg | |
}) | |
client.OnDisconnect(func() { | |
clientDisconnect.Done() | |
}) | |
err := client.Dial("ws://"+serverAddr+"/socket.io/websocket", "http://"+serverAddr+"/") | |
if err != nil { | |
t.Fatal(err) | |
} | |
iook := make(chan bool) | |
go func() { | |
t.Logf("Sending %d messages of size %v bytes...", numMessages, msg_size) | |
var err os.Error | |
for i := 0; i < numMessages; i++ { | |
if err = client.Send(make([]byte, msg_size)); err != nil { | |
t.Fatal("Send ERROR:", err) | |
} | |
} | |
iook <- true | |
}() | |
go func() { | |
t.Log("Receiving messages...") | |
for i := 0; i < numMessages; i++ { | |
<-clientMessage | |
} | |
iook <- true | |
}() | |
for i := 0; i < 2; i++ { | |
<-iook | |
} | |
go func() { | |
if err = client.Close(); err != nil { | |
t.Fatal("Close ERROR:", err) | |
} | |
}() | |
}() | |
} | |
t.Log("Waiting for clients disconnect") | |
clientDisconnect.Wait() | |
fmt.Printf("Sent %v messages * %v concurrent clients = %v messages\n", numMessages, clients, numMessages*clients) | |
time.Sleep(1e9) | |
} | |
time.Sleep(10e9) | |
} |
madari
commented
Aug 29, 2011
via email
No, it's in the tip.
http://code.google.com/p/go/source/detail?r=88744261dd47fb1649898d281c17f5ff987e02df
JP
…On Aug 29, 2011, at 1:40 AM, justinfx wrote:
Did you say the change was in the latest Go weekly? I'm using 6g version weekly.2011-08-17 9454, and I don't see that change in the websocket/client.go
##
Reply to this email directly or view it on GitHub:
https://gist.github.com/1174699
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment