node.js: socket.io服务端和客户端交互示例

简介: node.js: socket.io服务端和客户端交互示例

image.png

安装依赖

npm install express socket.io

修改 package.json

"type": "module",

服务端代码

// server.js
import express from "express";
import { createServer } from "http";
import { Server } from "socket.io";
import path from "path";
const __dirname = path.resolve();
const app = express();
const server = createServer(app);
const io = new Server(server);
// http
app.get("/", (req, res) => {
  res.sendFile(__dirname + "/index.html");
});
// websocket
io.on("connection", (client) => {
  console.log("socket connection");
  // 消息发送
  client.on("chat message", (msg) => {
    io.emit("chat message", msg);
  });
  // 断开连接
  client.on("disconnect", () => {
    console.log("socket disconnect");
  });
});
server.listen(3000, () => {
  console.log("server start");
});

客户端代码

<!-- index.html -->
<!-- 消息输入 -->
<form id="form">
  <input id="input" type="text" />
  <button>发送</button>
</form>
<!-- 消息显示 -->
<div id="message-list"></div>
<script src="socket.io/socket.io.js"></script>
<script>
  const form = document.querySelector("#form");
  const input = document.querySelector("#input");
  const messageList = document.querySelector("#message-list");
  const socket = io();
  // 发送消息
  form.addEventListener("submit", function (event) {
    event.preventDefault();
    if (input.value) {
      socket.emit("chat message", input.value);
      input.value = "";
    }
  });
  // 接收消息
  socket.on("chat message", (msg) => {
    const li = document.createElement("li");
    li.textContent = msg;
    messageList.appendChild(li);
  });
</script>
相关文章
|
2天前
|
JavaScript Java 测试技术
基于ssm+vue.js的框架失物招领信息交互平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js的框架失物招领信息交互平台附带文章和源代码设计说明文档ppt
9 1
|
18天前
|
JavaScript 前端开发
js的交互事件
js的交互事件
24 1
|
18天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
18天前
|
JSON 前端开发 JavaScript
从假数据到动态表格:一个简单的JavaScript和HTML示例
从假数据到动态表格:一个简单的JavaScript和HTML示例
|
18天前
|
JavaScript C#
C#winForm程序与html JS交互调用
C#winForm程序与html JS交互调用
|
18天前
|
JavaScript 前端开发 开发者
JavaScript中的变量提升:解析、应用及示例
JavaScript中的变量提升:解析、应用及示例
20 1
|
18天前
|
JavaScript
js开发:请解释什么是ES6的扩展运算符(spread operator),并给出一个示例。
ES6的扩展运算符(...)用于可迭代对象展开,如数组和对象。在数组中,它能将一个数组的元素合并到另一个数组。例如:`[1, 2, 3, 4, 5]`。在对象中,它用于复制并合并属性,如`{a: 1, b: 2, c: 3}`。
14 3
|
18天前
|
JavaScript
js开发:请解释什么是ES6的默认参数(default parameters),并给出一个示例。
ES6允许在函数参数中设置默认值,如`function greet(name = &#39;World&#39;) {...}`。当调用函数不传入`name`参数时,它将默认为&#39;World&#39;,提升代码简洁性和可读性。例如:`greet()`输出&quot;Hello, World!&quot;,`greet(&#39;Alice&#39;)`输出&quot;Hello, Alice!&quot;。
17 4
|
18天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的解构赋值(destructuring assignment),并给出一个示例。
ES6的解构赋值简化了JavaScript中从数组和对象提取数据的过程。例如,`[a, b, c] = [1, 2, 3]`将数组元素赋值给变量,`{name, age} = {name: &#39;张三&#39;, age: 18}`则将对象属性赋值给对应变量,提高了代码的可读性和效率。
|
18天前
|
SQL JavaScript
js开发:请解释什么是ES6的模板字符串(template string),并给出一个示例。
ES6的模板字符串以反引号包围,支持变量和表达式插入以及多行书写。例如,插入变量值`Hello, ${name}!`,计算表达式`${num1 + num2}`,以及创建多行字符串。模板字符串保留原始空格和缩进,简化了字符串拼接,提高了代码可读性。
20 6