此处将为大家介绍关于基于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 聊天记录)
- docker-compose 配置 MongoDB 加 mongo-express 基础配置
- Dockers 部署 MongoDB + mongo-express
- dojo 搭建基于xmpp的即时聊天系统
- Express+Socket.IO 搭建即时聊天
基于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.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 模板文件
开启远程
- 进入容器
docker exec -it mongodb /bin/bash
- 更新源
apt-get update
- 安装 vim 编辑器
apt-get install vim
- 修改 mongo 配置文件
- vim /etc/mongod.conf.orig
将其中的 bindIp: 127.0.0.1 注释掉或者改成 bindIp: 0.0.0.0
- 开启数据登陆验证
authorization: enabled
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 即时聊天 服务器推
要做一个网页在线聊天系统,本身有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 搭建即时聊天
技术栈是: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 搭建即时聊天的相关知识,请在本站搜索。
本文标签: