Node.js 中的 Web 套接字
什么是 Web 套接字?
Web Socket 是一种提供全双工(多路)通信的协议,即允许同时进行双向通信。它是一种现代网络技术,其中用户的浏览器(客户端)和服务器之间存在持续连接。在这种类型的通信中,在网络服务器和网络浏览器之间,它们都可以在任何时间点相互发送消息。传统上,在 Web 上,我们有一种请求/响应格式,用户发送 HTTP 请求,服务器对其进行响应。这在大多数情况下仍然适用,尤其是那些使用 RESTful API 的情况。但是服务器也需要与客户端进行通信,而不需要客户端轮询(或请求)。服务器本身应该能够向客户端或浏览器发送信息。这就是 Web Socket 发挥作用的地方。
为了在 NodeJS 中使用 Socket,我们首先需要安装一个依赖项socket.io 。我们可以通过在 cmd 中运行以下命令来简单地安装它,然后将此依赖项添加到您的服务器端 javascript 文件中,还可以安装一个 express 模块,这基本上是服务器端应用程序所必需的
npm install socket.io --save
npm install express --save
注意:上述命令中的 npm 代表节点包管理器,这是我们安装所有依赖项的地方。在 Node 5.0.0 版本之后不再需要 --save 标志,因为我们现在安装的所有模块都将添加到依赖项中。
在服务器端 JavaScript 文件中创建服务器:
javascript
const express = require('express'); // using express
const socketIO = require('socket.io');
const http = require('http')
const port = process.env.PORT||3000 // setting the port
let app = express();
let server = http.createServer(app)
let io = socketIO(server)
server.listen(port);
javascript
javascript
// listener when server emit any message
socket.on('createMessage', (newMessage)=>{
console.log('newMessage', newMessage);
})
javascript
const express=require('express');
const socketIO=require('socket.io');
const http=require('http')
const port=process.env.PORT||3000
var app=express();
let server = http.createServer(app);
var io=socketIO(server);
// make connection with user from server side
io.on('connection', (socket)=>{
console.log('New user connected');
//emit message from server to user
socket.emit('newMessage', {
from:'jen@mds',
text:'hepppp',
createdAt:123
});
// listen for message from user
socket.on('createMessage', (newMessage)=>{
console.log('newMessage', newMessage);
});
// when server disconnects from user
socket.on('disconnect', ()=>{
console.log('disconnected from user');
});
});
server.listen(port);
javascript
ChatApp
现在我们需要建立从服务器端到客户端的连接,服务器将能够通过该连接向客户端发送数据。
// make a connection with the user from server side
io.on('connection', (socket)=>{
console.log('New user connected');
});
同样,在客户端,我们需要添加一个脚本文件,然后与服务器建立连接,用户通过该连接将数据发送到服务器。
javascript
现在要从服务器向用户发送消息或数据,我们在从服务器端建立的连接内生成一个套接字“socket.on()”。
javascript
// listener when server emit any message
socket.on('createMessage', (newMessage)=>{
console.log('newMessage', newMessage);
})
现在可以从任何一方发送任何数据,以便在服务器和客户端之间生成连接。然后,如果服务器发出消息,则客户端可以收听该消息,或者如果客户端发出消息,则服务器可以收听该消息。因此,我们必须为服务器和客户端上发出的消息和消息侦听生成一个套接字。
服务器端代码示例:
javascript
const express=require('express');
const socketIO=require('socket.io');
const http=require('http')
const port=process.env.PORT||3000
var app=express();
let server = http.createServer(app);
var io=socketIO(server);
// make connection with user from server side
io.on('connection', (socket)=>{
console.log('New user connected');
//emit message from server to user
socket.emit('newMessage', {
from:'jen@mds',
text:'hepppp',
createdAt:123
});
// listen for message from user
socket.on('createMessage', (newMessage)=>{
console.log('newMessage', newMessage);
});
// when server disconnects from user
socket.on('disconnect', ()=>{
console.log('disconnected from user');
});
});
server.listen(port);
输出:
客户端代码示例:
javascript
ChatApp
输出: