官网: https://socket.io/docs/v2/client-initialization/

安装使用

npm i socket.io@2.3.0

创建一个服务端的socket

  1. const express = require('express');
  2. const http = require('http');
  3. const path = require('path');
  4. const socketIo = require('socket.io');
  5. const app = express();
  6. const server = http.createServer(app);
  7. app.use(express.static(path.resolve(__dirname, 'public')))
  8. const options = { /* ... */ };
  9. const io = socketIo(server, options);
  10. io.on('connection', socket => {
  11. // 有一个新的客户端链接到服务器成功以后,触发事件
  12. console.log('新的客户端链接进来了');
  13. // 监听客户端的clientMsg消息
  14. socket.on('clientMsg', chunk => {
  15. console.log(chunk.toString('utf-8'));
  16. })
  17. const timer = setInterval(() => {
  18. // 每两秒钟,发送一个消息给客户端,消息名字为serverMsg
  19. socket.emit('serverMsg', 'i am server')
  20. }, 2000);
  21. socket.on("disconnect", () => {
  22. clearInterval(timer)
  23. console.log('client closed');
  24. })
  25. });
  26. server.listen(12306, () => {
  27. console.log('server start on port 12306')
  28. });

创建一个客户端socket

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://cdn.bootcdn.net/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
  9. </head>
  10. <body>
  11. <h1>Welcome Websocket</h1>
  12. <button>给服务器发消息</button>
  13. </body>
  14. <script>
  15. const socketIo = io.connect(); // 如果是同一个域下,可以不写地址,如果不是则需要写地址,https://server-domain.com
  16. document.querySelector('button').onclick = function () {
  17. socketIo.emit('clientMsg', 'msg from client')
  18. }
  19. socketIo.on('serverMsg', (chunk) => {
  20. console.log(chunk)
  21. })
  22. socketIo.on('disconnect', () => {
  23. console.log('server closed')
  24. })
  25. </script>
  26. </html>
  • 监听客户端的消息,clientMsg是客户端和服务器商定好的消息类别,可以有很多消息类别,服务器可以根据不同的消息类别的名字,进行不同的处理

    1. // 监听客户端的clientMsg消息
    2. socket.on('clientMsg', chunk => {
    3. console.log(chunk.toString('utf-8'));
    4. })
  • 客户端向服务器发送消息,消息类别为商定好的clientMsg,

    1. socketIo.emit('clientMsg', 'msg from client')
  • 服务器端向客户端发送消息和客户端向服务端发送消息一样,商定消息类别serverMsg,

    1. const timer = setInterval(() => {
    2. // 每两秒钟,发送一个消息给客户端,消息名字为serverMsg
    3. socket.emit('serverMsg', 'i am server')
    4. }, 2000);
  • 客户端监听服务端消息,消息类别为商定好的serverMsg,客户端可以根据不同的消息类别,做不同的处理

    1. socketIo.on('serverMsg', (chunk) => {
    2. console.log(chunk)
    3. })
  • 客户端/服务端断开链接,另一方可以监听到

    1. socket.on("disconnect", () => {
    2. clearInterval(timer)
    3. console.log('client closed');
    4. })