本想着从hello word开篇,也确实写了相关学习笔记。各种原因吧,现在又着急写出作品,便作罢。

这里将记录一个node.js+socket.io的实时聊天程序。(当然我也是跟着网上各种教程资料学习,也是第一次写博客,请各位不喜勿喷,小缓本就没自信)

需求分析:

1:允许客户端有相同的用户名。

2:进入聊天室后可以看到当前在线的用户和在线人数。

3:用户上线或退出,客户端进行实时更新。

4:用户发送消息,实时接收。

node的基础知识这里不再赘述,首先先学习一下socket.io服务端和客户端的一些方法。本篇先不进入项目阶段,先来学习点基本知识

1、服务端

io.on('connection',function(socket));监听客户端连接,回调函数会传递本次连接的socket

io.sockets.emit('String',data);给所有客户端广播消息

io.sockets.socket(socketid).emit('String', data);给指定的客户端发送消息

socket.on('String',function(data));监听客户端发送的信息

socket.emit('String', data);给该socket的客户端发送消息

广播消息

//给除了自己以外的客户端广播消息

socket.broadcast.emit("msg",{data:"hello,everyone"});

//给所有客户端广播消息

io.sockets.emit("msg",{data:"hello,all"});

分组

socket.on('group1',function(data){

socket.join('group1');

});

socket.on('group2',function(data){

socket.join('group2');

});

客户端发送

socket.emit('group1') 就可以加入group1分组

踢出分组

socket.leave(data.room);

对分组中的用户发送消息 

//不包括自己

socket.broadcast.to('group1').emit('event_name',data);

//包括自己

io.sockets.in('group1').emit('event_name',data);

broadcast方法允许当前socket client不在该分组内

获取连接的客户端socket

io.sockets.clients().forEach(function(socket){

});

获取分组信息

//获取所有房间(分组)信息

io.sockets.manager.rooms

//来获取此socketid进入房间信息

io.sockets.manager.roomClients[socket.id]

//获取particular room 中的客户端,返回所有此房间的socket实例

io.sockets.clients('particular room')

2.客户端

建立一个socket连接

var socket = io("ws://103.31.201.154:5555");

监听服务消息

socket.on('msg',function(data){

socket.emit('msg', {rp:"fine,thank you"}); //向服务器发送消息

console.log(data);

});

socket.on("String",function(data)) 监听服务端发送的消息 Sting参数与服务端emit第一个参数相同

监听socket断开与重连。

socket.on('disconnect', function() {

console.log("与服务其断开");

});

socket.on('reconnect', function() {

console.log("重新连接到服务器");

});

客户端socket.on()监听的事件:

connect:连接成功
connecting:正在连接
disconnect:断开连接
connect_failed:连接失败
error:错误发生,并且无法被其他事件类型所处理
message:同服务器端message事件
anything:同服务器端anything事件
reconnect_failed:重连失败
reconnect:成功重连
reconnecting:正在重连
当第一次连接时,事件触发顺序为:connecting->connect;当失去连接时,事件触发顺序为:disconnect->reconnecting(可能进行多次)->connecting->reconnect->connect。

下篇日志将附上环境搭建及代码实现。

我的学习笔记之node----node.js+socket.io实时聊天(1)的更多相关文章

  1. 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

  2. 我的学习笔记之node----node.js+socket.io实时聊天(2)

    废话不多说,直接贴代码吧.注释很详细了. 服务端代码: /** * Created by LZX on 2015/10/7. */(function () { var d = document, w ...

  3. node.js + socket.io实现聊天室一

    前段时间,公司打算在社区做一个聊天室.决定让我来做.本小白第一次做聊天类功能,当时还想着通过ajax请求来实现.经过经理提示,说试试当前流行的node.js 和socket.io来做.于是就上网学习研 ...

  4. 转载:node.js socket.io

    本文转自:http://www.xiaocai.name/post/cf1f9_7b6507  学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...

  5. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  6. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  7. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  8. 基于node.js+socket.io+html5实现的斗地主游戏(1)概述

    一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...

  9. 用node.js(socket.io)实现数据实时推送

    在做商品拍卖的时候,要求在商品的拍卖页面需要实时的更新当前商品的最高价格.实现的方式有很多,比如: 1.setInterval每隔n秒去异步拉取数据(缺点:更新不够实时) 2. AJAX轮询方式方式推 ...

随机推荐

  1. windows server 2008 r2配置NTP时间服务器

    windows server 2008做NTP服务器与H3C网络设备组网首先WINDOWS SERVER 2008默认是关闭NTP服务的,需要通过修改注册表开启方法如下:--------------- ...

  2. Django的乐观锁与悲观锁实现

    1)     事务概念 一组mysql语句,要么执行,要么全不不执行.  2)  mysql事务隔离级别 Read Committed(读取提交内容) 如果是Django2.0以下的版本,需要去修改到 ...

  3. 记一笔MyBatis的坑

    记一笔MyBatis的坑 1.sql查询concat()连接函数xml运行查询乱码 ) , ), char)'%') bll FROM fact_dkxx sq 由于连接的字符串中包含数字与百分比字符 ...

  4. ionic2踩坑之文本域自适应高度(自定义指令,适用angular2)

    话不多说,看代码: import { Directive, ElementRef, HostListener,Input, Renderer, Component } from '@angular/c ...

  5. 接口测试-chap4-关联接口测试

    关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...

  6. maven工程项目依赖爆红,手动导入依然缺少依赖

    1.新建一个工程 2.把依赖添加到新建工程的pom文件 神奇的事情发生了,依赖自动补全!!! 3.点击install 安装一下可能有些依赖会有其他依赖 建议:不要在自己原来的工程上浪费时间,新建工程. ...

  7. centos7限制普通用户访问单一目录下的单一文件

    要求给开发同事开设一个查看日志的账号,并限制其只能访问该目录下的单一文件 1.先新建账号 useradd loglook passwd loglook 家目录为/home/loglook 2.日志的属 ...

  8. vscode写react有warning

    [js] Experimental support for decorators is a feature that is subject to change in a future release. ...

  9. OSX编译安装Python3及虚拟开发环境Virtualenv

    0X00.前言 因为工作原因,最近主要做Python开发,刚好电脑系统重装之后所有的东西都需要重新配置.此文主要记录OSX下通过源码编译安装Python3以及安装虚拟开发环境Virtualenv. 0 ...

  10. 京东Y事业部打造一体化质量管理平台

    互联网企业质量管理的困惑 作为互联网时代的互联网企业,我们的研发模式和传统模式相比,最显著的不同在于发布节奏加快了,这个加快不是快了10%,20%,50%,而是加快了几倍,甚至几十倍,上百倍.面对加快 ...