websocket通信的实现

什么是websocket?用处是什么?

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。通俗的说,就是基于TCP的HTTP协议只能客户端发起请求,服务器来应答,是单向的,而现在这个协议,使得服务器变得更加灵活更加聪明不那么高冷了而也有主动的一面了,同时减少了很多客户端资源的浪费。

搬个场景来说明它的好处(http协议下的ajax轮询场景):

客户端:啦啦啦,有没有新信息(Request)

服务端:没有(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:没有。。(Response)

客户端:啦啦啦,有没有新信息(Request)

服务端:你好烦啊,没有啊。。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:好啦好啦,有啦给你。(Response)

客户端:啦啦啦,有没有新消息(Request)

服务端:。。。。。没。。。。没。。。没有(Response) —- loop

为了解决这种问题,于是出现了websocket技术。就说这么多,如果想了解更多可以去查找更多的资料,接下来我们就来实现一个这样的通信。

基于node的websocket通信的实现

nodeJS的socket.io模块可以很简单的让你将websocket通信玩起来。还是直接上代码吧,以下是一个非常简单的聊天室用户登录栗子,大家可以实时看到哪些人上机了。

下面是服务器端代码:

// 引入必要的模块
var http = require('http')
var express = require('express')
var sio = require('socket.io')
var fs = require('fs')

var app = express()
var server = http.createServer(app)

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html')
})

server.listen(3000)

// socket.io监听服务器得到一个io对象,可对websocket做处理
var io = sio.listen(server)

var names = []

// 监听连接事件,连接成功可获得一个socket对象,可对websocket通信进行处理
io.on('connection', function (socket) {
    socket.emit('login', names)
    socket.on('login', function (data) {
        names.push(data)
        io.sockets.emit('login', names)
    })
})