AnyChat

Server Side

How server works ?

  • node.js
  • pm2

Server Api

(socket.io)

port 1733

Server Monitor

(client)

port 1743

Phone

(client)

Phone

(client)

connect, join, send, disconnect

Message

Broadcast

send client list

socket.on('join', data => {
    const jwtToken = data.accessToken;
    jwt.verify(jwtToken.replace(/^Bearer\s/, ''), JWT_TOKEN, async (err, payloads) => {
      if (err) {
        return;
      }
      
      // push user into user list
    });
}):

Client Join Server (via Facebook)

Server API

if (sender) {
  socket.broadcast.emit('receive', {
      id: sender.payloads.id || 1,
      avatar: sender.payloads.avatar,
      name: sender.payloads.name || '江西拿',
      content: `[ ${sender.payloads.name || sender.payloads.id} ]: ${data.content}`,
  });
}

Message Broadcasting

Server API (cont.)

socket.on('disconnect', () => {
      const leaveIndex = userList.findIndex((s) => s.socketId === socket.id);
      if (leaveIndex >= 0) userList.splice(leaveIndex, 1);

      io.emit('disconnection', {
        content: `-- [ ${socket.handshake.query.name || socket.id} ] disconnected --`,
        list: userList,
      });
    });

Client Disconnect

Server API (cont.)

componentWillMount() {
    socket.on('connected', (data) => {
      this.setState({
        receive: [
          ...this.state.receive,
          data.content,
        ],
      });
    });
    socket.on('checkUser', (data) => {
      this.setState({
        clients: data.list,
      });
    });
    socket.on('receive', (data) => {
      this.setState({
        receive: [
          ...this.state.receive,
          data.content,
        ],
      });
    });
    socket.on('disconnection', (data) => {
      this.setState({
        receive: [
          ...this.state.receive,
          data.content,
        ],
        clients: data.list,
      });
    });
  }

Server  Monitor

  • connected
  • check user
  • receive
  • disconnection
const socket = io.connect('http://localhost:1733', {
  query: 'name=Server',
});

AnyChat Server side demo

By Travor Lee

AnyChat Server side demo

  • 175