如何理解socket.io官网上创建聊天室的demo
来源:互联网 发布:单反吧口碑好的淘宝店 编辑:程序博客网 时间:2024/05/17 04:50
下面代码是socket.io 官网上使用express作为服务器框架,使用socket.io作为通讯工具搭建聊天室的demo的代码,本人通过查看express源码和socket.io源码,对该服务的创建过程有一些自己的理解,特记录下来以便日后复习,也希望能帮助到一些同学,如有不妥之处,请多多指教。
var app = require('express')();var http = require('http').Server(app);var io = require('socket.io')(http);app.get('/', function(req, res){ res.sendfile('index.html');});io.on('connection', function(socket){ console.log('a user connected');});http.listen(3000, function(){ console.log('listening on *:3000');});
要理解上面的例子,我们首先来看看使用nodejs原始方法创建http服务器和使用express框架创建服务器的方法。
使用nodejs创建http server的步骤:
var http = require('http'); //加载http模块var server = http.createServer(function(req, res){}); //创建http服务器 并且制定监听器server.listen(3000) //指定监听端口号
这样已经创建了一个http服务器,可以在服务器上访问3000端口。
使用express框架创建服务器的步骤如下:
var express = require('express'); //加载express模块var app = express(); app.listen(3000);
调用express() 函数会返回一个函数对象并赋值给app,该函数对象的函数体如下:
function(req, res, next) { app.handle(req, res, next);};
其中app.handle()方法是从application 模块继承下来的,这个方法就是用来具体处理http请求的,具体实现可以查看express/lib/application.js文件。这里不做深究,我们可以看到,这个函数对象和的函数体和使用原始方法创建服务是传递的函数体 /* function(req, res){} */是不是很像。接下来我们在看看app.listen方法,app.listen方法如下:
function listen() { var server = http.createServer(this); return server.listen.apply(server, arguments);}
可以看到,使用express创建服务是在调用app.listen()时才创建http服务,而app.listen()中的this指的是app函数对象的函数体本身,也就是上面提到的
function(req, res, next) { app.handle(req, res, next);};
也就是说,在app.listen()中创建http服务,并且使用上面函数作为监听器来处理http请求。
并且返回该服务器的实例。
理解了上面的流程之后,我们在来看创建聊天室的代码:
var app = require('express')();var http = require('http').Server(app);var io = require('socket.io')(http);app.get('/', function(req, res){ res.sendfile('index.html');});io.on('connection', function(socket){ console.log('a user connected');});http.listen(3000, function(){ console.log('listening on *:3000');});
第一行 的app是一个函数对象,其函数体如下:
function(req, res, next) { app.handle(req, res, next);};
第二行代码创建了一个http服务,并且用app函数作为监听器,用来处理http请求。
第三行代码创建了一个将创建的http.Server实例作为参数传递给了require(‘socket.io’)(http)创建了一个socket.io服务。于是该socket.io服务于http.Server服务共享同一端口。
由于app.listen()能够创建一个http.Server实例并返回,所以上面代码还可以写成:
var app = require('express')();var http = app.listen(3000, function(){ console.log('listening on *:3000');});var io = require('socket.io')(http);app.get('/', function(req, res){ res.sendfile('index.html');});io.on('connection', function(socket){ console.log('a user connected');});
- 如何理解socket.io官网上创建聊天室的demo
- socket.io入门以及简易聊天室Demo的展示
- 使用socket.io编程的简单聊天室
- Socket.io在线聊天室
- SOCKET IO 网络聊天室
- Socket.io在线聊天室
- nodejs+socket.io聊天室
- nodejs socket.io 聊天室
- Socket.io在线聊天室
- socket.io 网络聊天室
- Socket.io在线聊天室
- 基于Node.js,Express,Socket.io创建简单聊天室
- Socket.IO聊天室~简单实用
- JSP+Nodejs+Socket.IO 聊天室
- socket.io 实现在线聊天室
- 简单聊天室socket.io实现
- 【自己的整理】socket.io官方demo|创建简单的聊天应用
- Socket.io的一点理解
- python opencv 读取视频文件并显示
- 排序算法(一)模板类
- DBFS POJ1198 Solitaire
- UVAlive-3363 String Compression
- django与jquery数据传递过程
- 如何理解socket.io官网上创建聊天室的demo
- c++中的find
- 彻底弄懂matrix和canvas
- Hbase介绍及应用
- eclipse添加 task tags 步骤 (即 todo)
- 外部排序基石——合并排序
- poj 2325 && uva 10527
- XSHELL下直接下载文件到本地(Windows
- Java虚拟机系列(一):内存区域