STACK = websocket & socketIO

Websocket

1. Push mechanism

  • pooling

  • websocket

2. Websocket vs Http

  • websocket 一開始需要 http建立連接, 之後就不用http了

HTTP

Websocket

Pattern

request-response

bi-direction

# parallel connections

~10 per server

1024

Load balancing || proxy

Standard

Complex

Support on all browsers

YES (100%)

~YES(90%)

Drop client detection

No

Yes

Overhead

Moderate overhead per request-response

Moderate overhead to establish connection, minimum overhead per message

protocl

Level 7

Level 7

SocketIO

1. Basic

1.1. Server in node.js

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const axios = require('axios');

const port = 4001;
const index = require('./routes/index');

const app = express();
app.use(index);
const server = http.createServer(app);
const io = socketIo(server);

// socket-io
io.on('connection', socket => {
  console.log('New connection');

  socket.emit('init data', { data: '123' }); // server emits to clients

  socket.on('disconnect', () => console.log('Client disconnected')); // on client
});

// REST
app.post('/status', (req,res) => {
  ...
  io.emit('update data',{ data: newData });
  res.send('OK');
});

// Server
server.listen(port, () => console.log(`Listening on port ${port}`));

1.2. Client in react.js

class App extends Component {
  constructor(props) {
    super(props);
    ...
  }

  componentDidMount() {
    this.socket = socketIOClient(ENDPOINT);
    this.socket.on('read data', this.handleReadData);
  }

  onSend() {
    return () => {
      ...
      this.socket.emit('send idxs to process', { idxs });
    };
  }

  ...
}

2. Advance

private communication

broadcast

namespaces & rooms

Last updated

Was this helpful?