最近研究聊天室功能,准备用nodejs实现。下面是自己的尝试!!

  • nodejs的安装这里就不详细赘述了。

程序创建

  • 引入required模块
var express = require('express');
var app = express();
var http = require('http').Server(app);
  • 创建监听端口
http.listen(8000, function() {
console.log('Server running at http://127.0.0.1:8000/');
});
  • 以上代码我们完成了一个可以工作的 HTTP 服务器。使用 node 命令执行以上的代码:(*就是我们上面代码保存的文件名)
node ****.js

express模块

var express = require('express');
var app = express();
var http = require('http').Server(app);
http.listen(8000, function() {
console.log('Server running at http://127.0.0.1:8000/');
});
  • 这样我们的8000端口就开启这个服务了。下面我们通过socket.io模块实现服务于客户端的交互。

socket.io模块

  • 首先io.sockets.on函数接受字符串”connection”作为客户端发起连接的事件,当连接成功后,调用带有socket参数的回调函数。我们在使用socket.IO的时候,基本上都在这个回调函数里面处理用户的请求。
  • socket中最重要的两个方法是emit和on方法。

    说白了就是发送和接收的方法。在服务端socket.emit就是想客户端发送数据,socket.on就是接收客户端返回的数据。在客户端恰恰相反。
io.on('connection', function(socket) {}
  • connect作为客户端发起连接的事件。当连接成功后开始调用带有socket的回调函数。
this.socket = io.connect('ws://127.0.0.1:8000');
this.socket.emit('login', {
userid: this.userid,
username: this.username,
userpwd: this.userpwd
});
  • 客户端对应的就发起这个连接请求。发起连接后客户端向服务端发起一个事件login,并且携带参数对象(userid,username,userpwd)。下面我们看看服务端接收这个事件login
socket.on('login', function(obj) {
//obj这个对象就是客户端传递过来的,obj.userid,obj.username,obj.userpwd
//我们就可以通过obj这个对象处理相应的登录逻辑处理
}
  • nodejs主要通过socket来实现服务端和客户端的通信

其他API

  • 向所有客户端广播:socket.broadcast.emit(‘broadcast message’);

我们可以通过他实现群内公告等功能。

  • 进入一个房间(非常好用!相当于一个命名空间,可以对一个特定的房间广播而不影响在其他房间或不在房间的客户端):socket.join(‘your room name’);

  • 向一个房间广播消息(发送者收不到消息):socket.broadcast.to(‘your room name’).emit(‘broadcast room message’);

  • 向一个房间广播消息(包括发送者都能收到消息)(这个API属于io.sockets):io.sockets.in(‘another room name’).emit(‘broadcast room message’);

  • 强制使用WebSocket通信:(客户端)socket.send(‘hi’),(服务器)用socket.on(‘message’, function(data){})来接收。

最新文章

  1. SQL Server 查询树结构的表,查询一个节点的所有子节点
  2. 解决ewebeditor for php在IE8下报editor.js错误的解决方案
  3. paip.提升用户体验--radio图片选择器 easyui 实现..
  4. objective-c底层: runtime机制
  5. UVALive 6145 Version Controlled IDE(可持久化treap、rope)
  6. 进程kswapd0与events/0消耗大量CPU的问题
  7. Apache安全配置方案
  8. [ActionScript 3.0] AS3 时间日期格式化DateTimeFormatter类的运用
  9. Codeforces Round #332 (Div. 2) A. Patrick and Shopping 水题
  10. jQuery的动画效果
  11. SOCI、LiteSQL、POCO数据库访问类库对比
  12. 无效的 URI: 未能分析证书颁发机构/主机
  13. Plinq-Parallel.ForEach for 性能提升
  14. java中substring的使用方法
  15. Swift基础--使用TableViewController自己定义列表
  16. Java之路——环境配置与编译运行
  17. 关于input 的选中,自定义input[type="checkbox"]样式
  18. Django-rest-framework源码分析----权限
  19. winform中按钮透明的方法
  20. DevOps的故事(如何整合开发和运维?)

热门文章

  1. scrapy实战9动态设置ip代理从数据库中随机获取一个可用的ip:
  2. 谷歌地球 Google Earth v7.3.2.5495 专业版
  3. 第二章 Session会话管理
  4. 反⑨baka拖更大队:临时约法
  5. Excel催化剂开源第12波-VSTO开发遍历功能区所有菜单按钮及自定义函数清单
  6. 解决springmvc返回中文乱码问题
  7. [PTA] 数据结构与算法题目集 6-1 单链表逆转
  8. 【译】WebAPI,Autofac,以及生命周期作用域
  9. 安装解压版MySQL5.76及以上版本 出现服务正在启动-服务无法启动的问题
  10. Java EE.JSP.内置对象