Nodejs新手学习:基本是参照Nodejs入门经典写的一个socket.io聊天室
Nodejs新手学习:基本是参照Nodejs入门经典写的一个socket.io聊天室
很简单的一个小程序,用到socket.io
git: https://github.com/fwjyttbtx/ChatApp
希望能指出问题
Nodejs新手学习:基本是参照Nodejs入门经典写的一个socket.io聊天室
简介
本教程将带你通过一个简单的Node.js应用——基于socket.io的聊天室。这个项目非常基础,适合初学者理解Node.js和WebSocket的工作原理。
技术栈
- Node.js: 用于后端开发。
- socket.io: 用于实时通信。
- Express: 用于创建Web服务器。
步骤
-
初始化项目 创建一个新的文件夹并初始化npm项目:
mkdir chatapp cd chatapp npm init -y
-
安装依赖 安装所需的npm包:
npm install express socket.io
-
编写服务器端代码 创建一个
server.js
文件,并添加以下代码:const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); // 创建Express应用 const app = express(); // 创建HTTP服务器 const server = http.createServer(app); // 启动socket.io const io = socketIo(server); // 静态文件服务 app.use(express.static('public')); // 监听连接事件 io.on('connection', (socket) => { console.log('A user connected:', socket.id); // 监听消息事件 socket.on('chat message', (msg) => { console.log('message: ' + msg); // 广播消息给所有客户端 io.emit('chat message', msg); }); // 处理断开连接 socket.on('disconnect', () => { console.log('User disconnected:', socket.id); }); }); // 监听端口 server.listen(3000, () => { console.log('listening on *:3000'); });
-
编写客户端代码 在项目中创建一个
public
文件夹,并在其中创建一个index.html
文件,添加以下HTML和JavaScript代码:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Socket.io Chat</title> <style> #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 8px; margin-bottom: 10px; background: #f5f5f5; } </style> </head> <body> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var form = document.getElementsByTagName('form')[0]; var input = document.getElementById('m'); var ul = document.getElementById('messages'); form.addEventListener('submit', function(e) { e.preventDefault(); if (input.value) { socket.emit('chat message', input.value); input.value = ''; } }); socket.on('chat message', function(msg) { var item = document.createElement('li'); item.textContent = msg; ul.appendChild(item); window.scrollTo(0, document.body.scrollHeight); }); </script> </body> </html>
-
运行项目 在命令行中运行服务器:
node server.js
打开浏览器访问
http://localhost:3000
,你就可以看到一个简单的聊天室了。
总结
以上是一个非常基础的socket.io聊天室实现。你可以在此基础上扩展功能,例如用户登录、房间管理等。希望这个示例对你有所帮助!
app.get(’/’, function(req, res){ res.render(‘index’,{title:‘xx’});});
对的 title删除了 然后我没添加了 多谢指正~
没办法连接啊,我输入用户名点击GO的出现如下错误: info - handshake authorized 5YfjQ5sr1djNSYkJU5Mv
/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/transports/websocket.js:33 else transport = new protocolVersions[‘default’](mng, data, req); ^ TypeError: undefined is not a function at new WebSocket (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/transports/websocket.js:33:20) at Manager.handleClient (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:662:19) at Manager.handleUpgrade (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:618:8) at Server.<anonymous> (/Users/pro/Desktop/ChatApp-master/node_modules/socket.io/lib/manager.js:123:10) at Server.EventEmitter.emit (events.js:106:17) at Socket.socket.ondata (http.js:1986:14) at TCP.onread (net.js:525:27)
请楼主帮忙查看啊?
请问你的系统是?这个是跑在win7下的 我在公司写的,回家后clone下来npm install
之后没有问题呀。看意思是找不到protocolVersions
的定义的样子,能把你的环境告诉我么,我看能复现不
ChatApp\app.js:63 if(err) throw err; ^ Error: ENOENT, open ‘e ChatApp\messageData\message Mon Mar 24 2014.txt’
添加个messageData这个文件夹就行了 我没有写这个文件夹创建的代码。上传时候是被gitignore掉的
根据你的描述,这个帖子似乎是在寻求帮助以完善一个基于Socket.IO的简单聊天室程序。由于你没有提供具体的问题或错误信息,我将提供一些关于如何构建这样一个聊天室的基本指导,并附上一些示例代码。
示例代码
服务器端(使用Express + Socket.IO)
首先确保安装了必要的依赖:
npm install express socket.io
然后创建server.js
文件:
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);
app.get('/', (req, res) => {
res.send('<h1>Welcome to the Chat Room</h1>');
});
io.on('connection', (socket) => {
console.log('A user connected:', socket.id);
socket.on('chat message', (msg) => {
console.log('Message:', msg);
io.emit('chat message', msg); // 广播给所有客户端
});
socket.on('disconnect', () => {
console.log('User disconnected:', socket.id);
});
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
客户端(HTML + JavaScript)
创建一个简单的HTML页面来连接到服务器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chat Room</title>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
document.addEventListener('DOMContentLoaded', () => {
const form = document.querySelector('form');
const input = document.querySelector('#input');
const messagesContainer = document.querySelector('#messages');
form.addEventListener('submit', (e) => {
e.preventDefault();
if (input.value) {
socket.emit('chat message', input.value);
input.value = '';
}
});
socket.on('chat message', (msg) => {
const item = document.createElement('li');
item.textContent = msg;
messagesContainer.appendChild(item);
});
});
</script>
</head>
<body>
<form>
<input id="input" autocomplete="off" /><button>Send</button>
</form>
<ul id="messages"></ul>
</body>
</html>
解释
- 服务器端:我们使用Express设置了一个简单的HTTP服务器,并使用Socket.IO处理WebSocket通信。当一个新的用户连接时,我们监听他们发送的消息并将其广播给所有其他在线用户。
- 客户端:这是一个基本的HTML页面,它通过Socket.IO与服务器建立连接。当表单提交时,它会发送一条消息到服务器,同时接收来自服务器的消息并在页面上显示它们。
如果你遇到了特定的问题或者错误,请提供更多详细信息,这样我可以更准确地帮助你解决问题。