Nodejs - talk to me -- IM工具

Nodejs - talk to me – IM工具

基于node.js+mongodb的在线即时聊天系统:

主要中间件:

展现层: 1.bootstrap 2.jquery

通信层: socket.io

逻辑及持久层: 1.node.js 2.node-mongodb-native

数据库系统:mongodb

http://git.oschina.net/fornane/talk2me-im

ps.代码还很乱~木有时间重构~BUG还略多~o_O

效果图如下,红果果的~哈哈~

QQ图片20130715161242


14 回复

Nodejs - talk to me – IM工具

简介

本项目介绍了一个基于Node.js和MongoDB的在线即时聊天系统。该项目使用了多种中间件和技术栈来实现一个简单但功能强大的IM工具。以下是项目的详细信息:

主要中间件

  • 展现层

    • Bootstrap:用于快速构建响应式的用户界面。
    • jQuery:简化DOM操作和事件处理。
  • 通信层

    • Socket.IO:提供实时双向通信,使得客户端与服务器可以即时地交换数据。
  • 逻辑及持久层

    • Node.js:后端运行环境,处理业务逻辑。
    • node-mongodb-native:MongoDB的Node.js驱动程序,用于数据存储和检索。
  • 数据库系统

    • MongoDB:NoSQL数据库,用于存储用户信息、聊天记录等数据。

示例代码

服务器端(Node.js + Socket.IO

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const MongoClient = require('mongodb').MongoClient;

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

// 连接MongoDB
const uri = 'mongodb://localhost:27017';
const dbName = 'chat_db';

MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) throw err;
    console.log("Connected successfully to MongoDB");

    const db = client.db(dbName);
    const usersCollection = db.collection('users');
    const messagesCollection = db.collection('messages');

    // 监听连接事件
    io.on('connection', (socket) => {
        console.log('A user connected:', socket.id);

        // 处理新消息
        socket.on('new_message', async (data) => {
            await messagesCollection.insertOne(data);
            io.emit('message_received', data);
        });

        // 处理断开连接
        socket.on('disconnect', () => {
            console.log('User disconnected:', socket.id);
        });
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

客户端(HTML + JavaScript + Socket.IO

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Talk to Me</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script>
</head>
<body>
<div class="container mt-5">
    <div id="messages" class="border p-3 mb-3"></div>
    <input type="text" id="messageInput" class="form-control mb-3" placeholder="Type your message here...">
    <button id="sendButton" class="btn btn-primary">Send</button>
</div>

<script>
    const socket = io('http://localhost:3000');

    $('#sendButton').click(() => {
        const message = $('#messageInput').val();
        socket.emit('new_message', { text: message });
        $('#messageInput').val('');
    });

    socket.on('message_received', (data) => {
        $('#messages').append(`<p>${data.text}</p>`);
    });
</script>
</body>
</html>

总结

以上代码展示了如何使用Node.js、Socket.IO、Express以及MongoDB来构建一个简单的IM工具。客户端通过Socket.IO与服务器进行实时通信,而服务器则负责处理消息并将其存储到MongoDB中。希望这个示例能帮助你理解和实现类似的IM系统。


求在线运行… 另外 node_modules/ 没有 gitignore

live demo??

求给个小果果图

传了一张上去~将就看看~

暂时没有找到比较好的node.js容器,过阵子有时间了去找一个~哈哈~

暂时没有找到比较好的node.js容器,过阵子有时间了去找一个~哈哈~

支持一下 :)

hello~ 最近还在做node开发么?我们公司做im相关产品,不知道您有没有兴趣聊一下~ 微信 bboalimoe 邮箱 hengyang@petchat.io

chat.lalami.la 这个更完整,还有在线视频,基于webrtc

http://chat.lalami.la 一个女同的聊天室

学习下 自豪地采用 CNodeJS ionic

针对“Nodejs - talk to me – IM工具”这个帖子,我们可以实现一个基于 Node.js 和 MongoDB 的简单即时通讯(IM)系统。该系统将使用 socket.io 来实现实时通信,并利用 node-mongodb-native 与 MongoDB 进行数据交互。

示例代码

  1. 安装依赖:

    npm install express socket.io mongodb bootstrap jquery
    
  2. 后端代码 (server.js):

    const express = require('express');
    const http = require('http');
    const socketIo = require('socket.io');
    const MongoClient = require('mongodb').MongoClient;
    
    const app = express();
    const server = http.createServer(app);
    const io = socketIo(server);
    
    // MongoDB 链接
    const uri = 'mongodb://localhost:27017';
    const dbName = 'talk2me';
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
    
    app.use(express.static(__dirname + '/public'));
    
    client.connect(err => {
      if (err) throw err;
      console.log("Connected correctly to server");
      const db = client.db(dbName);
      const collection = db.collection('messages');
    
      io.on('connection', socket => {
        console.log('A user connected');
    
        socket.on('send message', data => {
          collection.insertOne(data, (err, result) => {
            if (err) throw err;
            io.emit('new message', data);
          });
        });
    
        socket.on('disconnect', () => {
          console.log('User disconnected');
        });
      });
    
      server.listen(3000, () => console.log('Server is running on port 3000'));
    });
    
  3. 前端代码 (public/index.html):

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Talk to Me</title>
        <link rel="stylesheet" href="/css/bootstrap.min.css">
        <script src="/js/jquery.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <style>
            #messages { height: 400px; overflow-y: scroll; }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>Talk to Me</h1>
            <div id="messages"></div>
            <input type="text" id="message" placeholder="Type a message..." />
            <button id="send">Send</button>
        </div>
        <script>
            var socket = io();
            $('#send').click(function() {
                var message = $('#message').val();
                socket.emit('send message', { text: message });
                $('#message').val('');
            });
    
            socket.on('new message', function(data) {
                $('#messages').append('<div>' + data.text + '</div>');
                $('#messages').scrollTop($('#messages')[0].scrollHeight);
            });
        </script>
    </body>
    </html>
    

解释

  1. 后端 (server.js):

    • 使用 Express 提供静态文件服务。
    • 连接到 MongoDB 并创建一个监听 Socket.IO 连接的服务器。
    • 当客户端发送消息时,存储到 MongoDB 并广播给所有连接的客户端。
  2. 前端 (index.html):

    • 使用 Bootstrap 进行样式设计。
    • 通过 jQuery 和 Socket.IO 实现用户界面,使用户可以输入并发送消息,同时接收并显示其他用户的实时消息。

这只是一个简单的实现,实际应用中可能需要添加更多的功能如用户认证、消息加密等。

回到顶部