---
title: NodeJs小试牛刀--聊天室搭建
date: 2016-12-08 10:29
tags: [nodejs]
categories: [编程]
---
最近研究聊天室功能,准备用nodejs实现。下面是自己的尝试!!
**最近研究聊天室功能,准备用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
```
![这里写图片描述](http://img.blog.csdn.net/20161205142739611)
## 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){})来接收。