Node Express JS:套接字IO模块示例
Socket IO简介
节点JS:套接字IO模块用于开发实时客户端-服务器通信应用程序。
它在内部使用" WebSocket"编程模型在客户端和服务器之间提供实时双向通信。
我们可以观察到,以下技术提供了WebSocket编程来实现这种应用程序。
- HTML5 WebSocket
- Java EE 7 WebSocket API
- 节点JS:Socket IO模块
传统HTTP和WebSocket方法之间的区别
传统的HTTP方法:我们有旧的和传统的HTTP请求-响应无状态方法来提供客户端和服务器之间的通信。
但是它遵循"推送"模型,这意味着当客户端向服务器发送请求时,服务器会将响应推送到客户端。
WebSocket方法:我们也可以使用WebSocket方法来提供客户端和服务器之间的通信。
但是,与传统的HTTP请求-响应无状态方法不同,WebSocket方法使用"拉"模型在客户端和服务器之间提供通信,这意味着服务器始终将数据拉至客户端。
因此,这是一种更有效,更快捷的提供客户端-服务器通信的方法。
Socket IO(WebSocket)编程的优点:
- 更快的双向通讯
- 跨浏览器支持
- 跨平台支持
- 独立于平台的Web框架
套接字IO设置
与某些节点JS默认模块(例如" npm"," http","事件")随Node JS Platform基本安装(不需要单独的步骤来安装这些模块)一起提供时,Socket.IO并不作为Node JS Default模块提供。
我们需要手动安装。
我们已经使用" node install"命令讨论了"如何安装Node JS模块"。
如果您不熟悉此命令,请阅读我以前的文章:" NPM安装更新和卸载示例"
全局安装Socket.IO在开始Express JS开发之前,首先要做的第一步是使用" npm install"命令安装Express JS模块。
npm install -g socket.io
这里的" socket.io"表示套接字IO模块,"-g"表示全局安装Socket.io模块。
在完成Socket IO Module的安装后,我们需要检查该模块是否已成功安装。
如果安装成功,我们可以在C:\Users \ [Windows_USerName] \ AppData \ Roaming \ npm \ node_modules \ socket.io中找到一个新文件夹,如下所示:
套接字IO示例
使用默认设置" socketio"创建一个Node.js:Express JS项目(有关更多详细信息,请参阅我之前的文章"使用Enide Studio 2014 IDE的Express JS WebApplication")。
使用" socket.io"模块依赖项更新" package.json"文件。
默认package.json
{ "name": "socketio", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.12.4", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.12.4", "jade": "~1.9.2", "morgan": "~1.5.3", "serve-favicon": "~2.2.1" } }
更新了package.json
{ "name": "socketio", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.12.4", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.12.4", "jade": "~1.9.2", "morgan": "~1.5.3", "serve-favicon": "~2.2.1", "socket.io": "~1.3.5" } }
- 观察默认的" node_modules"文件夹
如果我们现在观察我们的项目,它包含所有默认的Express JS模块库,如下所示:
- 使用" socket.io"库更新" node_modules"。
为了使用Socket IO模块库,我们需要在项目根目录下执行以下命令:
npm install --save socket.io
其中" – save"选项意味着从本地存储库中检索" socket.io"库,并将其添加到我们的项目中。
这类似于将JAR文件添加到我们的Java项目中。
在我们的项目根目录中打开命令提示符,然后执行以上命令:
注意:-请忽略这些错误或者警告。
现在,在Enide IDE Studio 2014 IDE中刷新" socketio"项目,并观察到新添加的socketio库到我们的项目中,如下所示:
- 使用以下内容更新app.js:
app.js
//Required Modules var express = require('express'); var path = require('path'); var http = require('http'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var io = require('socket.io'); //Routings var index = require('./routes/index'); var user = require('./routes/users'); //Create Express App var app = express(); app.set('port', process.env.PORT || 3000); //view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); app.use('/users', user); var server = http.createServer(app); io.listen(server); io.sockets.on('connection', function (socket) { socket.on('messageChange', function (data) { console.log(data); socket.emit('receive', data.message.split('').reverse().join('') ); }); }); server.listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); module.exports = app;
代码说明
1-9行,将所有必需的依赖项Node JS模块导入我们的应用程序
12-13行,将路由导入到我们的应用程序中
第16行,创建Express JS Application对象
第17行,将Express WebServer端口设置为侦听。
这是我们可以设置所需端口号的方法。第20-21行,定义我们的应用程序视图模板引擎,即JADE
第33行,创建一个HTTP服务器
第34行,使用套接字IO(WebSocket)包装HTTP服务器
第36-41行,io.sockets.on()打开客户端和服务器之间的WebSocket连接。
第47行,导出我们的应用程序。
使用以下内容更新index.jade文件:
/views/index.jade
extends layout block content h1= title p Welcome to span.received-message #{example} input(type='text', class='message', onkeyup='send(this)') script(src="/socket.io/index.js") script. var socket = io.connect('https://localhost'); socket.on('receive', function (message) { console.log('received %s', message); document.querySelector('.received-message').innerText = message; }); function send(input) { console.log(input.value) var value = input.value; console.log('Sending Client Message: %s to Server', value); socket.emit('messageChange', {message: value}); }
- 使用以下内容更新index.js文件:
/routes/index.js
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { example: 'Node Express JS: Socket.IO Module', title: 'Socket.IO Module' }); }); module.exports = router;
- 最终的项目结构如下所示:
执行套接字IO示例
- 在项目根目录中打开命令提示符,然后执行以下命令:
npm start
- 运行Socket IO Example并观察输出
使用以下URL访问应用程序:https://localhost:3000 /
要在内部查看WebSocket的电源,请使用鼠标右键单击并选择"检查元素",如下所示:
选择"控制台"选项卡。
在"文本框"中输入一些文本,并观察控制台输出。