用socket.io.js和express实现一个简单的对话框

服务端用node.js,使用express

npm install --save express
npm install --save socket.io

在目录里创建一个app.js作为node项目的入口

app.js代码:

// 使用 express 框架
var app = require('express')();
var server = require('http').Server(app);
// 引入 socket.io
var io = require('socket.io')(server);
// 监听 80 端口
server.listen(3000,function(){
    console.log("服务器启动成功")
});
// io 各种事件
io.on('connection', function (socket) {
    console.log('websocket has connected')
    socket.emit('message', { hello: '欢迎链接' });
    socket.on('say', function (data) {
        console.log(data);
        if (data.my === '走,一起吃饭吧') {
            socket.emit('eating', { hello: '果断走起呀!' });
            return
        }
        io.sockets.emit('news', { hello: data.my });//socket等价于io.sockets
    });
});

然后运行 node app就启动了node后台,坐等客户端来交互了

客户端代码:创建一个index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>socket</title>
    
    <style>
        input {
          background-color: #fff;
          background-image: none;
          border-radius: 4px;
          border: 1px solid #bfcbd9;
          box-sizing: border-box;
          color: #1f2d3d;
          font-size: inherit;
          height: 40px;
          line-height: 1;
          outline: 0;
          padding: 3px 10px;
        }
        .el-button--primary {
          color: #fff;
          background-color: #20a0ff;
          border-color: #20a0ff;
        }
        .el-button {
          display: inline-block;
          line-height: 1;
          white-space: nowrap;
          cursor: pointer;
          background: #00aac5;
          border: 1px solid #c4c4c4;
          color: #fff;
          margin: 0;
          padding: 10px 15px;
          border-radius: 4px;
          outline: 0;
          text-align: center;
        }
      </style>
</head>
<body>
    <div>
        <div id="content">
        </div>
    </div>
    <div>
        <input type="text" id="input">
        <button class="el-button el-button--primary el-button--large" type="button" onclick="say()"><span>发送消息</span></button>
    </div>
<script src="https://cdn.staticfile.org/socket.io/2.3.0/socket.io.js"></script>
<script>
    // 实例化socket
    socket = io.connect('http://127.0.0.1:3000');
    // 监听 message 会话
    socket.on('message', function (data) {
        console.log(data)
        let html = document.createElement('p')
        html.innerHTML = `系统消息:<span>${data.hello}</span>`
        document.getElementById('content').appendChild(html)
        console.log(data);
    });
    // 按钮点击事件
    function say() {
      let t = document.getElementById('input').value
      if (!t) return
      let html = document.createElement('p')
      html.innerHTML = `你细声说:<span>${t}</span>`
      document.getElementById('content').appendChild(html)
      socket.emit('say', { my: t});
    }
    // 监听 news 会话
    socket.on('news', function (data) {
      console.log(data);
      let html = document.createElement('p')
      html.innerHTML = `小皮咖说:<span>我知道了,你说“${data.hello}”</span>`
      document.getElementById('content').appendChild(html)
    });
    // 监听吃饭会话
    socket.on('eating', function (data) {
      console.log(data);
      let html = document.createElement('p')
      html.innerHTML = `小皮咖说:${data.hello}`
      document.getElementById('content').appendChild(html)
    });
</script>
</body>
</html>

打开页面就可以和聊天了:

效果图:

原文地址:https://www.cnblogs.com/fqh123/p/12494792.html