socket.io的小例子

前言

socket.io是原生ws封装的第三方库,它不仅仅对客户端做了封装,还对服务端也进行了封装。
提供了很多能用得到的功能,比如:
断链自动尝试重链
对不支持ws的浏览器做兼容(降级轮循http)
发送和监听消息的封装(原生的,无论前后端写起来都比较冗长)

服务端

socket.io当然不会仅支持node,但是官方推荐node体验比较好

import { createServer } from "http";
import { Server } from "socket.io";

const httpServer = createServer(); // socket.io的服务需要http服务做支撑

const io = new Server(httpServer, { // 初始化ws
    cors: { //处理ws跨域问题
        origin: "*",
        methods: ["GET", "POST"]
    }
});

io.on("connection", (socket) => { // 监听ws链接成功
    console.log('与客户端链接成功');
    socket.on("yanhan", (data) => { // 监听ws的yanhan消息
        console.log('收到了阎涵的消息:'+ data);
    });

    setInterval(() => { // 定时给Yh发送当前时间
        socket.emit("toYh", "你好啊,现在已经"+new Date().toLocaleString());
    }, 3000);
});

httpServer.listen(3000); // 启动http服务

客户端

这里拿浏览器举例子

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>阎涵给服务器发消息</button>
</body>
<script src="./lib/socket.io.js"></script>
<script>

    // 三方插件socket.io的写法
    const socket = io("ws://localhost:3000"); //初始化ws

    document.querySelector('button').onclick = ()=>{
        socket.emit("yanhan", '我是女大佬');//发送消息
    }
    
    socket.on("toYh", (...args) => { //接收消息
        console.log('我接收到了toYh事件:', args);
    });
</script>

</html>

原生的写法(服务端)

参考:
https://blog.csdn.net/m0_37911706/article/details/128057137
https://github.com/websockets/ws

import WebSocket, { WebSocketServer } from 'ws';

//创建一个WebSocket服务器,在3000端口启动
const server = new WebSocketServer({ port: 3000 });

//只要有WebSocket连接到该服务器,就会触发'connection'事件
server.on("connection", (ws, req) => {
  const ip = req.socket.remoteAddress;
  const port = req.socket.remotePort;
  const clientName = ip + port;
  console.log(`客户端-${clientName}: 已连接`);

  /* 发送数据:ws通过send()方法来发送数据*/
  ws.send(`欢迎 客户端-${clientName}的加入`);

  // 接收数据:ws通过message事件来接收数据。当客户端有消息发送给服务器时,服务器就能够触发该消息
  ws.on("message", (message) => {
    console.log(`收到消息:`+ message);
  });
});
posted @   丁少华  阅读(290)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示