JavaScript Socket.IO实时通信

23次阅读

Socket.IO基于websocket实现客户端与服务器的实时双向通信,具备自动重连、断线恢复等特性,适用于聊天应用、实时通知等场景;其由服务器端(node.js环境)和客户端组成,使用一致的API结构;通过express搭建服务器并监听connection事件处理连接、消息收发与断开;前端引入socket.io-client库,调用io()连接服务器,并用emit发送消息、on接收消息;支持emit、broadcast、rooms等通信方式,需注意CORS配置、反向代理部署及连接状态管理以避免内存泄漏。

JavaScript Socket.IO实时通信

javaScript中的Socket.IO是一个强大的库,用于实现客户端与服务器之间的实时双向通信。它基于WebSocket,但具备更好的兼容性和自动重连、断线恢复等特性,适合开发聊天应用、实时通知、协作工具等需要即时交互的功能。

Socket.IO基本组成

Socket.IO分为两部分:服务器端和客户端。

  • 服务器端:运行在Node.js环境中,通常集成在Express等Web框架中。
  • 客户端:通过浏览器引入socket.io-client,与服务器建立连接并收发消息。

两者使用相同的API结构,便于理解和维护。

搭建Socket.IO服务器

先安装依赖:

立即学习Java免费学习笔记(深入)”;

npm install express socket.io

创建一个简单的服务器:

JavaScript Socket.IO实时通信

ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

JavaScript Socket.IO实时通信116

查看详情 JavaScript Socket.IO实时通信

const express = require(‘express’);
const http = require(‘http’);
const socketIo = require(‘socket.io’);

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

io.on(‘connection’, (socket) => {
  console.log(‘用户已连接’);

  socket.on(‘message’, (data) => {
    io.emit(‘message’, data); // 广播给所有客户端
  });

  socket.on(‘disconnect’, () => {
    console.log(‘用户断开连接’);
  });
});

server.listen(3000, () => {
  console.log(‘服务器运行在 http://localhost:3000’);
});

前端连接与通信

html页面中引入客户端库并连接:

<script src=”/socket.io/socket.io.js”></script>
<script>
  const socket = io(‘http://localhost:3000’);

  // 发送消息
  function sendMessage() {
    const input = document.getElementById(‘msg’);
    socket.emit(‘message’, input.value);
    input.value = ”;
  }

  // 接收消息
  socket.on(‘message’, (data) => {
    const messages = document.getElementById(‘messages’);
    const li = document.createElement(‘li’);
    li.textContent = data;
    messages.appendChild(li);
  });
</script>

常用功能与注意事项

Socket.IO支持多种通信方式:

  • emit:发送事件,可携带数据。
  • broadcast:向除自己外的所有人发送(socket.broadcast.emit)。
  • rooms:加入房间实现群组通信,如聊天室或游戏房间。

注意点:

  • 确保CORS配置正确,避免跨域问题。
  • 生产环境建议使用反向代理(如nginx)处理WebSocket连接。
  • 合理管理连接状态,避免内存泄漏。

基本上就这些。掌握基础用法后,可以扩展出丰富的实时交互功能。

text=ZqhQzanResources