如何快速搭建一个web socket服务

290 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

问题

如何快速搭建一个web socket服务

操作

安装包

npm i express socket.io

注意,这里的express并不是必须的,也就是为了快速搭建服务器。

核心代码

在项目根目录下创建 app.js,内容如下

const express = require("express");
const app = express();
const http = require("http").createServer(app);
const io = require("socket.io")(http, {cors: true});

io.on("connection", socket => {  // 客户端链接成功
    console.log('~connection~')
    // 主动消息给客户端,这里的message是约定的频道名字,也可以取其他的
    io.emit("message", '服务器就绪...')
    socket.on("message", msg => {  
        // 监听的频道必须和客户端监听的频道相同,等待消息
        io.emit("message", "我是服务器:" + msg);  // 向所有客户端发送信息
    });

    io.on("disconnect", _ => {  // 客户端断开链接
       
    });

});

http.listen(3009, _ => {
    console.log("server running on 3009");
});

说明:

  1. 代码中的message是约定的频道名字,也可以取其他的
  2. {cors: true}表示支持跨域

启动服务器

node app.js

客户端代码

文件名为index.html

<!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>
    <script src="https://cdn.socket.io/4.4.0/socket.io.min.js"></script>
</head>
<body>
    
    <button id="btn">点击发消息</button>
    <script>
        const socket = io('http://localhost:3009');
        socket.on('connect', () => {
            console.log('看到这里,表示和服务器连接上了')
        
            // 监听来自服务器的消息
            // message是和服务器约定好的消息频道名字
            socket.on('message',(msg) => {
                console.log('来自服务器',  msg)
            })
        })
        document.getElementById('btn').addEventListener('click',() => {
            // 主动给服务器发送消息
            // message是和服务器约定好的消息频道名字
            socket.emit('message', '我是客户端')
        })
    </script>
</body>
</html>

运行效果

双击打开index.html文件,(或者使用live-server之类的服务器也可以),可以在network下的ws选项卡中看到: image.png 此时,在控制台的输出是:

image.png 可以看到,浏览器端能主动接收消息了。

点击页面上的按钮之后,消息发给服务器,服务器回传的结果如下:

image.png