Skip to content

Instantly share code, notes, and snippets.

@mstoykov
Created October 2, 2020 15:19
Show Gist options
  • Save mstoykov/51d0d7ab4d230047bfe14c6b661dae67 to your computer and use it in GitHub Desktop.
Save mstoykov/51d0d7ab4d230047bfe14c6b661dae67 to your computer and use it in GitHub Desktop.
Testing ws memory leak k6
'use strict'
var ws = require("k6/ws")
var k6 = require("k6")
var check = k6.check
var sleep = k6.sleep
var Counter = require('k6/metrics').Counter
var FetchRecordsSuccessRate = new Counter('FetchRecords_SuccessRate');
var connections = new Counter('Client_Read_Connections');
var RecordNumber = new Counter("RecordNumber");
var ErrorCounter = new Counter("ErrorCounter");
module.exports.FetchRecordsSuccessRate = FetchRecordsSuccessRate
module.exports.connections = connections
module.exports.RecordNumber = RecordNumber
module.exports.ErrorCounter = ErrorCounter
module.exports.default = function() {
var url = "ws://127.0.0.1:8080/numbers"
var res = ws.connect(url, {}, function(socket) {
var t = Math.floor(Math.random() * 5000)
socket.setTimeout(function() {
// console.log( t, "milliseconds passed, closing the socket");
socket.close();
}, t);
socket.on("message", function(data) {
try {
if (data && data.length) {
// console.log(data)
var num = parseInt(data, 10)
RecordNumber.add(Number(num))
}
} catch (e) {
console.log(e)
ErrorCounter.add(true)
}
FetchRecordsSuccessRate.add(!!data)
});
});
sleep(1)
}
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"flag"
"log"
"net/http"
"github.com/gorilla/websocket"
)
var addr = flag.String("addr", "localhost:8080", "http service address")
var upgrader = websocket.Upgrader{} // use default options
func numbers(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("upgrade:", err)
return
}
defer c.Close()
for {
err = c.WriteMessage(websocket.TextMessage, []byte("123"))
if err != nil {
log.Println("write:", err)
return
}
}
}
func main() {
flag.Parse()
log.SetFlags(0)
http.HandleFunc("/numbers", numbers)
log.Fatal(http.ListenAndServe(*addr, nil))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment