Socket.IO-Client 使用教程
Socket.IO-Client 是一个实时应用程序框架的客户端部分,它允许浏览器与服务器之间进行实时、双向的通信。Socket.IO 使用 WebSocket 协议并提供回退选项,确保即使在旧版浏览器中也能正常工作。
步骤 1: 安装 socket.io-client
npm install socket.io-client
步骤 2: 创建 Socket 连接
<div> <h1>Socket.IO with Vue 3</h1> <input v-model="message" @keyup.enter="sendMessage" placeholder="Type a message..." /> <ul> <li v-for="(msg, index) in messages" :key="index">{{ msg }}</li> </ul> </div> </template> <script> import { ref, onMounted, onBeforeUnmount } from 'vue'; import { io } from 'socket.io-client'; export default { setup() { const socket = io('http://localhost:3000'); // 替换为你的 Socket.IO 服务器地址 const message = ref(''); const messages = ref([]); const sendMessage = () => { if (message.value) { socket.emit('chat message', message.value); message.value = ''; } }; const receiveMessage = (msg) => { messages.value.push(msg); }; onMounted(() => { socket.on('chat message', receiveMessage); }); onBeforeUnmount(() => { socket.off('chat message', receiveMessage); socket.disconnect(); }); return { message, messages, sendMessage, }; }, }; </script> <style> /* 添加一些样式 */ </style>
步骤 3: 设置 Socket.IO 服务器 server.js
1.创建项目文件夹:
在你的工作目录中创建一个新的文件夹,例如 socket-server
mkdir socket-server
cd socket-server
2.初始化 Node.js 项目:
使用 npm 初始化一个新的 Node.js 项目:
npm init -y
这将创建一个package.json 文件。
步骤 2: 安装所需的依赖项
安装
express 和 socket.io;
npm install express socket.io
在项目根目录下创建一个名为 server.js 的文件,并添加以下代码:
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const allowedOrigins = [ "http://localhost:3000", //需要跨域的地址 ]; const io = new Server(server, { cors: { origin: (origin, callback) => { if (allowedOrigins.indexOf(origin) !== -1 || !origin) { callback(null, true); // 允许请求 } else { callback(new Error('Not allowed by CORS')); // 拒绝请求 } }, methods: ["GET", "POST"], allowedHeaders: ["my-custom-header"], credentials: true } }); io.on('connection', (socket) => { console.log('a user connected'); socket.on('chat message', (msg) => { console.log('message: ' + msg); io.emit('chat message', msg); }); socket.on('disconnect', () => { console.log('user disconnected'); }); }); app.use(express.static('public')); // 启动服务器 const PORT = 3000; server.listen(PORT, () => { console.log(`listening on *:${PORT}`); });
步骤 4: 运行服务器
node server.js
会看到输出:listening on *:3000
步骤 5: 测试 Socket.IO 服务器
在项目根目录下创建一个名为public的文件夹,并在其中创建一个 index.html文件,内容如下
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Socket.IO Test</title> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); function sendMessage() { const message = document.getElementById('message').value; socket.emit('chat message', message); document.getElementById('message').value = ''; } socket.on('chat message', function(msg) { const item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); }); </script> </head> <body> <ul id="messages"></ul>、 <input id="message" autocomplete="off" /><button onclick="sendMessage()">Send</button> </body> </html>
步骤 6: 访问客户端
开浏览器并访问 http://localhost:3000。你应该会看到一个简单的输入框和发送按钮,这样就可以实现不同终端的实时通信了!
最后确保文件结构正确
socket-server/
├── node_modules/
├── package.json
├── package-lock.json
├── public/
│ └── index.html
└── server.js