所属分类:web前端开发
WebSocket是一种基于TCP协议的全双工通信协议,在Web开发中被广泛应用于实现实时通信功能。在本篇文章中,我们将介绍如何使用WebSocket和JavaScript实现一个简单的在线问答系统。
我们先编写一个基础的HTML模板,并在其中引入WebSocket所需的JavaScript库。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>在线问答系统</title> </head> <body> <div id="messages"></div> <form id="message-form"> <input type="text" id="message-input" placeholder="请输入您的问题..."> <button type="submit">提交</button> </form> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="websocket.js"></script> </body> </html>
我们将WebSocket相关的JavaScript代码单独存放在一个文件中。在该文件中,我们需要定义几个变量和函数,并建立WebSocket连接,以便服务器能够向客户端发送消息。
// 声明变量 const serverUrl = 'ws://localhost:8080'; // WebSocket服务器地址 const socket = new WebSocket(serverUrl); // WebSocket连接 // 监听WebSocket事件 socket.onopen = function(event) { console.log('[WebSocket] 连接成功', event); }; socket.onclose = function(event) { console.log('[WebSocket] 连接关闭', event); }; socket.onerror = function(event) { console.error('[WebSocket] 发生错误', event); }; socket.onmessage = function(event) { console.log('[WebSocket] 收到消息', event); showMessage(event.data); }; // 发送消息到WebSocket服务器 function sendMessage(message) { socket.send(message); } // 显示消息 function showMessage(message) { $('#messages').append($('<p>').text(`机器人:${message}`)); } // 提交问题 $('#message-form').submit(function(event) { event.preventDefault(); const messageInput = $('#message-input'); const message = messageInput.val(); messageInput.val(''); $('#messages').append($('<p>').text(`你:${message}`)); sendMessage(message); });
最后,我们需要编写服务器端的代码。在本文中,我们将使用Node.js作为服务器的开发环境,并使用ws库来提供WebSocket服务。
const WebSocketServer = require('ws').Server; const server = new WebSocketServer({ port: 8080 }); console.log('WebSocket服务器已启动'); // 监听WebSocket连接事件 server.on('connection', function(socket) { console.log('WebSocket连接已建立'); // 监听WebSocket消息事件 socket.on('message', function(message) { console.log('收到消息', message); const response = handleQuestion(message); socket.send(response); }); // 监听WebSocket关闭事件 socket.on('close', function() { console.log('WebSocket连接已关闭'); }); }); // 处理问题 function handleQuestion(question) { // TODO: 添加问题处理逻辑 return '这是机器人的回答'; }
在以上代码中,我们创建了一个WebSocketServer对象,并在其上监听connection、message和close事件。当收到客户端发送的消息时,服务器将调用handleQuestion函数进行处理,然后将回复发送回客户端。
现在,我们打开两个浏览器窗口,一个充当客户端,一个充当服务器。在客户端浏览器中输入问题,然后点击提交按钮。服务器将回复一个表示机器人回答的消息,并在客户端浏览器中显示出来。
至此,我们已经成功实现了一个简单的在线问答系统。当然,这只是一个基础的示例,你可以根据自己的需求进行扩展和优化。