前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程.写博客的目的,一来是为了方便自己日后查阅某些语法,二来是本着学习和共享的精神,与大家探讨技术.本系列教程同步到个人的Github:https://github.com/yuanzm/MongoDB-demo MongoDB简介 MongoDB 是目前在IT行业非常流行的一种非关系型数据库(N…
前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有一些帮助.相信大多数跟随前面一章教程来到这一章的读者大多分成两类,第一类是知道node,想学习node,但是英文匮乏或者网上教程不给力,希望有一个全面一点的教程入门的:第二类应该是node入门,但是之前使用的不是类似MongoDB这种非关系型数据库,想学习一下的.从我个人的角度看来,我希望自己前一段…
前言 之前都是介绍一些基础知识,在这一节,我们就要开始实战coding了.正所谓磨刀不误砍柴工,准备工作显得尤为重要.很多demo只是追求效果的实现,并不注重整个demo的架构性.从我个人的角度看来,既然是demo,就应该是有参考价值的,而作为web的demo,就更加应该凸显整个demo的结构,所以这一节着重讲解个人喜欢的node项目的前后端架构. 另,本教程乃系列教程,如需从头看起,可先看前面两篇博客: http://www.cnblogs.com/yuanzm/p/4179766.html…
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有一些帮助.相信大多数跟随前面一章教程来到这一章的读者大多分成两类,第一类是知道node,想学习node,但是英文匮乏或者网上教程不给力,希望有一个全面一点的教程入门的:第二类应该是node入门,但是之前使用的不是类似M…
一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用的是mongodb , 并使用其相应mongoose对象工具来处理数据的存取. 功能主要涉及:群聊.私聊.设置个人信息.查看聊天记录.查看在线用户等 效果图: 你也可以直接来这里  查看演示 二.聊天室基本设计思路 除去上次的注册登录模块不说,本次主要就是增加了socket.io模块的设计 以及 …
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案…
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案…
原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方…
代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首先是登录页面: 接下来就是聊天页面: Socket.IO是Node.js的一个模块,它提供通过WebSocket进行通信的一种简单方式,WebSocket协议很复杂,但是Socket.IO提供了服务器和客户端双方的组件,所以只需要一个模块就可以给应用程序加入对WebSocket的支持,而且还能支持不…
所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍,对于基本的使用依然有很多说不清道不明的疑惑,于是决定通过做一个在线聊天室帮助理解.DEMO可以戳→chat room,代码可以戳→ChatRoom-AngularJS. 清晰图可以戳 http://sheilasun.sinaapp.com/public/images/chatroom.gif 功…
最近在学习nodejs,需要找一些项目练练手.找来找去发现了一个聊天室的教程,足够简单,也能从中学到一些东西.下面记录我练习过程中待一些笔记. nodeJS模块 共用到了2个模块,express和socket.io.socket.io的具体原理我不是很清楚,目前只知道可以和服务器交换数据,而且比ajax要方便很多.具体原理等以后学习到了再回来补充. 准备工作 前期的准备工作包括建立项目文件夹.创建文件.安装nodejs模块.生成配置文件.后期可能将源代码同步到github,并发布到网上. 创建文…
最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室.当然,我毫不犹豫选择了node来写,node有一个名叫socket.io的框架已经很完善的封装了socket相关API,所以无论是学习还是使用都是非常容易上手的,在这里强烈推荐!demo已经做好并放到我的个人网站了,大家可以试试,挺好玩的. 进去试试 ->   http://www.yinxiang…
基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交所选择的座位. 这时B用户进入选座页面,迅速的选择了座位,提交. 而这个时候,A终于选择完毕,提交. 发现座位已经被买了. 当用户越多这样的情况越严重. 具体场景就是如此. 1.简介 本项目是基于jquery.seat-charts在线选座插件.集合socket.io,实现的实时选座系统,可应用于剧…
im——Instant Messaging 即时通讯 基本技术原理 (1)通过IM服务器登陆或注销 (2)用户A通过列表找到B,用户B获得消息并与之交谈 (3)通过IM服务器指引建立与B单独的通讯通道 通讯方式 (1)在线直接通讯 直接通过服务器发送过来的用户B的IP地址.TCP端口号等信息,直接向用户B的PC机发出聊天信息,即时文字消息就不再IM服务器中转,直接通过网络进行点对点的通讯 (2)在线代理通讯 点对点通讯由于防火墙.网络速度等原因难以建立或者速度很慢,IM服务器将会主动提供消息中转…
socket官方:   http://socket.io/  需求:实现WEB IM功能,数据从服务器PUSH  不是PULL  websocket是基于HTML5的新特性,不兼容IE6,7,8 ...兼容性不好 使用 Node.js 和 Socket.IO 构建简单的聊天程序 在node.js根目录下创建文件夹chat,里面添加两个文件:app.js和index.html app.js var fs = require('fs') , http = require('http') , sock…
首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js var http=require("http"); var express=require("express"); var sio=require("socket.io"); var app=express(); app.use(express.static(__dirname+"/"…
前一段事件,我一个同学给他们公司用融云搭建了一套web及时通信系统,然后之前我的公司也用过环云来实现web及时通信,本人对web及时通信还是非常感兴趣的.私下读了融云和环信的开发文档,然后发现如果注册第三方貌似开发群聊就是个问题了(因为自己做个两个人聊天很简单,想做的在复杂些就要花钱了- -orz),包括后期我想开发表情包,群聊,和消息加密等等.本着节省的原则尝试去看了一下socket.io,结果一发不可收拾...好了闲话少说,今天来分享一份关于socket.io的东西!! 注:本篇文章建议有n…
node后端代码 // Setup basic express server var express = require('express'); var app = express(); var path = require('path'); var server = require('http').createServer(app); var io = require('socket.io')(server); var port = process.env.PORT || 9000; var…
前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个Demo的过程中用到最多的就是订阅事件.触发事件.广播事件. 根据官网完成Demo后,看到下面提到了几个问题,又继续实现了四个功能,其它几个还要继续实现. ①.当有新用户登录或离开时广播消息. ②.添加昵称.我在demo中的做法是把用户输入的第一条消息作为昵称. ③.发送消息时自己发送的消息不再给自己发…
首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html…
第一步:安装node git clone https://github.com/joyent/node.git cd node git checkout v0.10.33-release ./configure make make install 第二步:安装npm mac下使用命令ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 第三步:安装redis w…
简介: 此项目需要懂一点node.express 功能: 1.前端用户登录,查看服务端推送的消息,用户只能在一个地方登录,也就是单点登录 2.服务端首先登录,上传需要推送的信息文本,后台读取文本后,存入数据库,在取出来返回前端,链接socket服务,然后推送到前端 界面如下: 服务端界面: 用户管理界面: 1.修改.增加.删除等操作 前端界面: 技术栈: 前端: "axios": "^0.18.0"---(用户提交向服务器提交数据) "iview"…
原文地址:http://www.moye.me/2015/01/02/node_socket-io/ 引子 最近听到这么一个问题:Socket.IO 怎么实现私聊?换个提法:怎么定位到人(端),或者说怎么标识到连接,而不是依赖每个连接的socket.id.好问题. 在 Socket.IO Real-Time Web Application Development的指引下,形成了如下思路: 服务端在每个用户初次进入系统时,产生session_id 服务端强制用户输入昵称,与session_id对应…
利用socket.io来构建一个聊天室,输入自己的id和消息,所有的访问用户都可以看到,类似于群聊. socket.io 这里只用来做一个简单的聊天室,官网也有例子,很容易就做出来了.其实主要用的东西就是事件监听和触发,on和emit.当socket.io连接成功之后,后台就可以跟浏览器互相通信了. let io = socket(app); io.on('connection', socket => { socket.on('reseive', data => { io.emit('news…
在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这个实例中node.js最重要的作用就是将服务端迁移到了js,实现了客户端和服务端语 言上的统一,我们只要在浏览器上同时运行两个client.html客户端页面,即可进行简单的即是通讯了,socket.io才是我们真正用来实现即时 通讯的消息的收发. var server = http.createS…
直接上代码吧,被注释掉的主要是调试代码,和技术选型的测试代码 var app = require('express')(); var server = require('http').Server(app); server.listen(8080); app.get('/', function (req, res) { res.sendFile(__dirname + '/index.html'); }); var io = require('socket.io')(3000); var bei…
用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化,如果没有来自客户端的请求,用户就不会看到这些变化. 这种模式是不适合某些应用场景的,比如在社交网络用户需要近乎实时地知道其他用户最新的信息.对于普通站点来说, 请求-响应模式可以满足绝大多数的功能需求,但总有某些功能我们希望能够为用户提供实时消息的体验. 为解决这个问题,有两种方案可以选择: 仍旧使…
如果开发者想在一个特定的应用程序中完全控制消息与事件的发送,只需要使用一个默认的"/"命名空间就足够了.但是如果开发者需要将应用程序作为第三方服务提供给其他应用程序,则需要为一个用于与客户端连接的socket端口定义一个独立的命名空间. io.of(namespace) 制作两个命名空间 chat和news然后在客户端相互发送信息. var express=require("express"); var http=require("http");…
注:下面Demo的Server和Client都是纯后端. 并没有web页面. Server端代码: var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); //定义变量,用来存储socket.如果是多进程的话,那么socket可以考虑存入redis中 var socket…
客户端: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin: 0; padding: 0; list-style: none; } textarea{ resize: none; } .main1{ float: left;…