做了个Nodejs主题头像聊天室,作为socketio练习。
做了个Nodejs主题头像聊天室,作为socketio练习。
http://118.244.155.95:3001 首页为房间列表。根据主题不同,可以选择不同的头像, 在聊天内容页,点击自己的头像,可以更改头像。 兼容ie,就是效果比较难看。聊天过程可以调通。
6 回复
做了个Node.js主题头像聊天室,作为Socket.io练习
简介
最近我做了一个基于Node.js的聊天室项目,使用了Socket.io来实现实时通信。在这个聊天室中,用户可以根据不同的主题选择不同的头像,并且可以在聊天过程中更改头像。这个项目不仅是一个技术实践,也是一个关于实时通信应用的设计探索。
功能介绍
- 房间列表页面:用户可以查看不同的房间列表,每个房间有不同的主题,从而可以选择不同的头像。
- 聊天页面:用户可以发送消息并实时看到其他人的消息。点击头像可以更改当前使用的头像。
- 跨浏览器支持:项目兼容IE浏览器,但IE下的视觉效果可能不是最佳。
技术栈
- Node.js:后端服务框架。
- Express:用于构建Web应用的框架。
- Socket.io:用于实现客户端与服务器之间的实时双向通信。
- EJS:模板引擎,用于渲染HTML页面。
- CSS/Bootstrap:用于样式设计,确保良好的用户体验。
示例代码
服务器端(app.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.set('view engine', 'ejs');
app.use(express.static('public'));
let users = [];
io.on('connection', (socket) => {
console.log('New client connected');
socket.on('new user', (data) => {
users.push(data);
io.emit('user list', users);
});
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
users = users.filter(user => user !== socket.username);
io.emit('user list', users);
console.log('Client disconnected');
});
});
server.listen(3001, () => {
console.log('Server is running on port 3001');
});
客户端(index.ejs)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chat Room</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<div id="avatar-selector">
<img src="/images/avatar1.png" onclick="changeAvatar('/images/avatar1.png')">
<img src="/images/avatar2.png" onclick="changeAvatar('/images/avatar2.png')">
</div>
<ul id="users-list"></ul>
<input id="m" autocomplete="off" /><button>Send</button>
<ul id="messages"></ul>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/chat.js"></script>
</body>
</html>
客户端JavaScript(chat.js)
const socket = io();
document.querySelector('button').addEventListener('click', () => {
const message = document.getElementById('m').value;
socket.emit('chat message', message);
document.getElementById('m').value = '';
});
socket.on('chat message', function(msg) {
const item = document.createElement('li');
item.textContent = msg;
document.getElementById('messages').appendChild(item);
});
function changeAvatar(src) {
socket.emit('change avatar', src);
}
以上代码展示了如何创建一个基本的聊天室,包括用户登录、发送消息以及更改头像的功能。希望这个项目能为你提供一些启发!
很不错,学习了!
楼主,这个能不能开放源码啊,学习一下。。
http://118.244.155.95:3001/room/120 是不是可以随便输出就自建聊天室?
还是固定的几个聊天室? 能不能有个表单参数,然后根据用户输入动态创建聊天室?
木有。。暂时是固定的。。聊天室多了后,不知道怎么分配每个socket的信息。。。