登峰造极境

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Programming
  3. Node.js
  4. 正文

Node.js速学之-Socket.IO

2015-12-30
参考文献:[1][EN]Georgo Ornbo.傅强.陈宗斌. Node.js入门经典[M]. 北京:人民邮电出版社.2013.4-1

Socket.IO是Node.js的一个模块,提供通过WebSocket进行通信的一种简单方式。
相关技术:
Ajax 让开发者无需刷新WEB页面即可从服务器请求数据。
WebSocket: 服务器和浏览器之间保持连接持久打开,快速传输数据;但是不支持重新链接处理或心跳功能。

一、安装Socket.IO
安装命令:npm install socket.io
二、监听Socket.IO连接
index.html代码:

    
    

node.js端

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('Hello World', 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    console.log('User connected');
    socket.on('disconnect', function () {//不能改为io.socket
        console.log('User disconnected');
    });
});

三、服务器给客户端发送数据
Node.js代码

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data, 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    console.log('User connected');
    socket.emit('message',{text:'You have connected'});
    //socket.broadcast.emit('message',{text:'A new Text'}); 广播数据给所有已连接客户
    socket.on('disconnect', function () {
        console.log('User disconnected');
    });
});

index.html代码


    

Socket.IO Example

四、服务端实时发送数据给客户端(实时计数器)
Node.js代码

var http = require('http'),
    fs = require('fs');
var count = 0;
var server = http.createServer(function (req, res) {
    fs.readFile('./index.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data, 'utf-8');
    });
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
    count++;
    console.log('User connected. '+count+' user present');
    //console.log('User connected');
    socket.emit('users',{number:count});
    socket.broadcast.emit('users',{number:count}); //广播数据给所有已连接客户
    socket.on('disconnect', function () {
        count--;
        console.log('User disconnected');
        socket.broadcast.emit('users',{number:count});
    });
});

index.html 代码:


    

五、浏览器和服务器双向实时通信
浏览器给服务器发数据方法:

socket.emit('message',{text:meaage.value});

服务器给接收数据方法:

socket.on('mesage',function(socket){
socket.on('mesage',function(data){
  });
})
标签: 暂无
最后更新:2016-01-24

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号