www.91084.com

GVKun编程网logo

基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现(mongodb 聊天记录)

10

此处将为大家介绍关于基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现的详细内容,并且为您解答有关mongodb聊天记录的相关问题,此外,我们还将为您介绍关于docker

此处将为大家介绍关于基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现的详细内容,并且为您解答有关mongodb 聊天记录的相关问题,此外,我们还将为您介绍关于docker-compose 配置 MongoDB 加 mongo-express 基础配置、Dockers 部署 MongoDB + mongo-express、dojo 搭建基于xmpp的即时聊天系统、Express+Socket.IO 搭建即时聊天的有用信息。

本文目录一览:

基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现(mongodb 聊天记录)

基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现(mongodb 聊天记录)

记得从高中上课时经常偷偷的和同学们使用qq进行聊天,那时候经常需要进行下载qq,但是当时又没有那么多的流量进行下载,这就是一个很尴尬的事情了,当时就多想要有一个可以进行线上聊天的网站呀,不用每次痛苦的进行蓝牙传送软件了,现在,我从事了IT这个行业,便想要去实现当初的那个梦想吧。毕竟,不去努力的实现梦想,你会从一个梦想家变成一个幻想家。

由于从事的是前端工作,界面什么的对我来说是so easy,后台部分当然是选择了node.js,经过分析呢,数据库部分选择了mongoose,很早之前做个一个简易的聊天室,采用的是ajax轮询后台的方式实现的,这种方式对于服务器的压力很大,而且在用户量上去的的时候也会出现卡顿的现象,客户端和服务器通信使用的是webSocket协议。使用WebScoket协议,我们可以实现客户端和服务器的全双工通信,实现实时的服务器向客户端的消息推送,信息返回。由于浏览器对于WebScoket的支持性不是特别普遍,所以我们使用的是封装了WebScoket的socket.io,socket.io可以适配于所有的浏览器,因此,我们使用socket.io来实现客户端和服务端的通信。

选中MongoDB是因为它的简便性以及易操作性,聊天系统并不是说必须要严格遵守例如MysqL的CUID等准则,它允许我们可以延迟个几百毫秒收到聊天信息,其优点主要有:

(1)mongodb数据库体积较小,系统运行时较为灵活。
(2)可以提供对于任意类型的数据的查询。
(3)使用相应的技巧可以降低我们代码量以及提升查询速度。
(4)mongodb可以对我们之前的表格进行预加载。

我们简要的选择了我们要使用的技术,那么我们还需要对要做的产品进行分析设计,分析出来我们要做的产品都有哪些功能,我们要怎么样去实现这些功能,根据之前对于聊天系统的认知,我们设置系统的功能暂时分为后台管理系统和前台聊天室。其中后台管理系统有当前用户管理功能、聊天信息管理功能、而前台聊天室拥有添加好友、删除好友、好友私聊、群组群聊、修改密码、修改个人信息等功能。大概的功能模块图如下所示:

经过上部分的分析,我们队系统有了初步的认知。该系统分为两个主体,用户登录后的主页即为聊天室主页如图1所示。系统管理员登录后的主页即为adminChat.ejs如图2所示。

                                    图1  聊天室主页

                                    图2  后台管理主页

登录模块

由于是聊天系统,所以用户必须先要经过登录才能进入聊天室或者后台管理系统。因此系统的首页便是登录页,在登录页也可以进行注册。 下面以“登录”功能进行主要讲解。在登录界面,主要使用ajax去异步判断是否能登录成功,如果数据库中没有该用户,会提示用户前去注册,采用MVC设计模式。其运行界面如图3所示。

                                    图3  登录界面

登录界面前台代码如下:

//Form表单的提交控件代码 用户名">

docker-compose 配置 MongoDB 加 mongo-express 基础配置

docker-compose 配置 MongoDB 加 mongo-express 基础配置

docker-compose.yml 配置大概如下:

version: ''3''

services:
  mongo:
    image: mongo
    container_name: mongo
    hostname: mongo
    restart: always
    networks:
      - db
    ports:
      - "27017:27017"
    environment: #设置数据库用户名和密码
      TZ: Asia/Shanghai
      MONGO_INITDB_DATABASE: test
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    volumes: #数据卷映射
      - /mongoData/configdb/mongod.conf.orig:/etc/mongod.conf.orig  #这里做配置文件的映射,想通过配置文件开启数据库的权限验证,但好像没有效果,后面在研究下
      - /mongoData/data:/data/db
      - /mongoData/logs/:/var/log/mongodb
     command: [--auth] #开启mongo验证

  mongo-express:
    image: mongo-express
    container_name: mongo-express
    restart: always
    links:
      - mongo:mongo
    depends_on:
      - mongo
    networks:
      - db
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_OPTIONS_EDITORTHEME: 3024-night
      ME_CONFIG_MONGODB_SERVER: mongo
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: 123456
      ME_CONFIG_BASICAUTH_USERNAME: root
      ME_CONFIG_BASICAUTH_PASSWORD: 123456

networks:
  db:
    driver: bridge

直接运行 docker-compose up, 如果有多个 yml 文件最好指明下要运行的 yml 模板文件,例如: docker-compose -f youFileName.yml up , -f 表示制定 compose 模板文件

开启远程

  1. 进入容器
  • docker exec -it mongodb /bin/bash
  1. 更新源
  • apt-get update
  1. 安装 vim 编辑器
  • apt-get install vim
  1. 修改 mongo 配置文件
  • vim /etc/mongod.conf.orig

将其中的 bindIp: 127.0.0.1 注释掉或者改成 bindIp: 0.0.0.0

  1. 开启数据登陆验证
  • authorization: enabled

Dockers 部署 MongoDB + mongo-express

Dockers 部署 MongoDB + mongo-express

1. 拉取 Mongo 镜像

docker pull mongo:4.1.6

2.  运行镜像

docker run -d --name mongodb --volume /usr/local/mongodata:/data/db -p 27017:27017 mongo:4.1.6 --auth

3. 创建root用户

进入 mongo

$ docker exec -it mongodb mongo
MongoDB shell version v4.1.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3178ad60-401e-4c19-8575-b7ecbd21819d") }
MongoDB server version: 4.1.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
>

进入 admin 库并创建root用户

> use admin
switched to db admin
> show dbs
> db.createuser({user: 'root', pwd: '123', roles: [{role: "root", db: "admin"}]})
Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

4. 安装并与行mongo-express

$ docker run -d --name mongo-express -p 8081:8081 --link mongodb:mongo --env ME_CONfig_MONGODB_ADMINUSERNAME='root' --e
nv ME_CONfig_MONGODB_ADMINPASSWORD='123' mongo-express
84bef6b30fd17400ae1c64618273246667a68952e02ec929bdfcfef9004c7076

5. 检查

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
84bef6b30fd1        mongo-express       "tini -- /docker-ent…"   44 seconds ago      Up 19 seconds       0.0.0.0:8081->8081/tcp     mongo-express
ea6b16c829ca        mongo:4.1.6         "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:27017->27017/tcp   mongodb

13607@DESKTOP-V4C6O50 MINGW64 /d/Program Files/Docker ToolBox
$ docker logs -f 84
Waiting for mongo:27017...
Welcome to mongo-express
------------------------


Mongo Express server listening at http://0.0.0.0:8081
Server is open to allow connections from anyone (0.0.0.0)
basicAuth credentials are "admin:pass", it is recommended you change this in your config.js!
Database connected
Admin Database connected

 6. 附加

或许你用 ie 无法打开

 

dojo 搭建基于xmpp的即时聊天系统

dojo 搭建基于xmpp的即时聊天系统

dojo xmpp 即时聊天 服务器推

要做一个网页在线聊天系统,本身有pc端软件,使用的是 tigase服务器搭建的xmpp。
在网上找了下客户端怎么实现xmpp,没找到比较方便的。
有看到dojo实现了xmpp,但是没有详细说明文档,而且看到一般都是配合openfire实现的。可是tigase和openfire的配置好像不一样(本人不懂 )
dojo本身提供了一个例子程序,可是里面的参数有些不知道怎么配

各位大大有知道的请不吝赐教
或者有没有其他的方式来实现即时通讯呢?
ajax长轮询?flash xmlsocket?
ajax长轮询对服务器的压力貌似也很大?
flash建立socket有没有现成的能整合xmpp的请求与接收字符解析的?

回复讨论(解决方案)

php的socket或comet,socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦。相比之下,comet(基于HTTP长连接的”服务器推”)实现起来更加方便,而且兼容所有的浏览器。

Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。

Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。
你说的这个就是 ajax长轮询。
我这个本身是有pc端软件,就和QQ一样,然后再有web端。本身pc端是使用的xmpp协议,构建好的xmpp服务端。
使用php构建socket服务器很不现实

Express+Socket.IO 搭建即时聊天

Express+Socket.IO 搭建即时聊天

  技术栈是:nodejs express socketio bootstrap sqlite

  由于初学,代码排版模块化实现的不好,只是提供了一个功能。

 源码地址: https://github.com/Qquanwei/Wire  

 运行node server.js后即提供了一个端口号为8080的服务

初始打开的时候显示如下

 


 创建一个会话ID,如果该ID没有人创建过的话则直接创建成功,然后跳转到聊天界面。当然也可以通过连接按钮连接到已经创建好的聊天室中。

 聊天界面如下

   

 一个普通的聊天界面。 

    不安全因素就是在你聊天的时候可能被其他人乱入,因为没有提供验证机制,所以可以通过创建一些奇妙的会话ID来减少这种情况发生的可能性。 当然可以用中文,只要你把ID提供给你的朋友们,你们就可以一起happy的聊天了。

   

    

今天关于基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现mongodb 聊天记录的讲解已经结束,谢谢您的阅读,如果想了解更多关于docker-compose 配置 MongoDB 加 mongo-express 基础配置、Dockers 部署 MongoDB + mongo-express、dojo 搭建基于xmpp的即时聊天系统、Express+Socket.IO 搭建即时聊天的相关知识,请在本站搜索。

本文标签:

上一篇在WIN7下安装和配置SQL Server 2005 Express Edition(精简版)(win7安装sql2005教程)

下一篇Regular Expressions --正则表达式官方教程(正则表达式 详解)