개인적으로 혁신적인 소켓.부하 측정 방법.iframe 및 PhantomJS를 사용하여 여러 동시 액세스 상태 설정

우리 회사는 자주 JMeter를 사용하여 부하 테스트를 진행한다.
일반적인 HTTP 요구라면 괜찮을 거예요.하지만 웹소켓을 사용할 때는 좀 번거롭다.

Socket.부하 테스트


@nulltask선생님께서 저에게 iframe로 확인하는 것이 좋겠다고 건의하셨습니다.나는 전혀 생각하지 못했다.
웹 사이트에 대한 액세스 부담 및 Socket입출력 액세스를 구분하기 위해 서버를 분리합니다.

동시 액세스만 가능한 테스트


Amazon EC2


host: hogehoge-ec2.amazonaws.com
port: 5000
load.js
console.log('接続数取得テスト');

var fs = require('fs');
var app = require('http').createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end(fs.readFileSync('load.html'));

}).listen(4000);

var io = require('socket.io').listen(app);

io.sockets.on('connection', function(socket) {

  io.sockets.emit('count', socket.client.conn.server.clientsCount);
  console.log('コネクション数',socket.client.conn.server.clientsCount);

  socket.on('disconnect', function(data) {
    console.log('コネクション数',socket.client.conn.server.clientsCount);
    io.sockets.emit('count', socket.client.conn.server.clientsCount);
  });
});

Amazon S3


host: hogehoge.com
load.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>

  <p>接続数:<span id="count"></span></p>
  <script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
  <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>

  <script>
      var socket = io.connect('http://hogehoge-ec2.amazonaws.com:5000');
      var $count = $('#count');

      socket.on('count', function(data) {
          $count.text(data);
          console.log(data);
      });
  </script>
</body>
</html>

io.이렇게 하지 않으면 안 될 것 같다

로컬 HTML


iframe의 기술수, 100이라면)의 읽기 자체가 의심스러워 50 정도로 바꿨습니다.
(나는 숫자를 투명한 수치로 바꾸고 싶어서)
loadtest-client.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>

    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>
    <iframe src="http://hogehoge.com/load.html" frameborder="0"></iframe>   
    <!--
    ・
    ・省略
    ・
    -->
</body>
</html>
이렇게 하면 이 로컬에 접근하면 연결 수 (동시 접근) 가 50이 됩니다.
여러 탭에서 이걸 열었어요.
↓ 이런 느낌 웃음

실제 서버 쪽에서 콘솔을 보면 동시 액세스 수가 증가합니다.

메시지 보내기



PhantomJS부터 하면 편리해요.


마지막으로 iframe를 사용하는 것이 좋은 방법이라고 생각하지만 탭을 여는 것은 번거롭기 때문에 PhantoomJS를 사용하여 여러 개의 접근을 실현한다.

PhantomJS로 로컬 HTML 10회 에뮬레이션


open.js
for(var i = 0; i < 10; i++){
    var page = require('webpage').create();
    page.open('http://localhost/loadtest/loadtest-client.html', function() {
    });
}
$ phantomjs open.js

브라우저를 하나하나 훑어보지 않아도 돼, 편리해.

최후


제게 건의를 했습니다.@nulltask선생님, 감사합니다!

좋은 웹페이지 즐겨찾기