概述
在现代的 Web 应用中,即时通信已经成为了一个必备的功能。实现即时通信需要一种能够实时传输数据的工具,socket.io 就是其中非常流行的一种。Nodejs 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它提供的轻量级 socket.io 库可以让我们轻松实现即时通信功能。
环境准备
在开始使用 socket.io 之前,你需要确保你的电脑上已经安装了 Nodejs,可以在命令行中执行 node -v
命令来查看当前 Nodejs 版本号。如果没有安装的话,可以到官网上下载最新版的 Nodejs。
安装 socket.io
在项目目录下执行以下命令安装最新版本的 socket.io:
npm install socket.io
在项目目录下创建一个 index.html
文件和一个 server.js
文件。
HTML 部分
// javascriptcn.com 代码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Socket.io Chat</title> </head> <body> <ul id="messages"></ul> <form action=""> <input id="message" autocomplete="off" /><button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script> var socket = io(); $('form').submit(function(){ socket.emit('chat message', $('#message').val()); $('#message').val(''); return false; }); socket.on('chat message', function(msg){ $('#messages').append($('<li>').text(msg)); }); </script> </body> </html>
这段 HTML 代码创建了一个简单的聊天窗口,用户可以通过输入框输入消息并发送。发送的消息会显示在聊天窗口中。
Nodejs 部分
在 server.js 文件中加入以下代码:
// javascriptcn.com 代码示例 const app = require('express')(); const http = require('http').Server(app); const io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); socket.on('chat message', function(msg){ console.log('message: ' + msg); io.emit('chat message', msg); }); }); http.listen(3000, function(){ console.log('listening on *:3000'); });
这段代码启动了一个 Web 服务器,并监听 3000 端口。当用户在浏览器中访问该网站时,将会把 HTML 文件发送给用户。
当用户在聊天窗口中输入消息并发送时,这条消息将会通过 socket.io 发送到服务器,服务器收到消息后,将消息发送回客户端并显示在聊天窗口中。同时,服务器也会将消息输出到控制台。
运行程序
在命令行中执行以下命令启动服务器:
node server.js
然后在浏览器中访问 http://localhost:3000
,就可以进入聊天室了。
总结
通过这篇文章,我们了解了使用 Nodejs 和 socket.io 实现即时通信的基础知识。虽然本文提供的例子比较简单,但是你可以通过修改代码来实现更复杂的功能。希望这篇文章对你有所帮助,愉快地编程吧!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6529cc2f7d4982a6ebc359aa