使用 Express Generator 创建 Socket.IO 服务器
Socket.IO是一个用于服务器和客户端之间实时通信的库。在 Socket.IO 中,标头只共享一次,它也适用于 TCP 层的顶部。 Web Sockets 是 Socket.IO 库的基础。在非 express-generator 形成的 express 应用程序中更容易实现 Socket.IO。
Socket.IO 主要用于基于事件的通信。在这里,服务器或客户端发出一个事件,并被另一个事件捕获。
模块安装:
安装快速生成器:
npm install -g express-generator
创建快速应用程序:
npm express applicaion_name
例如,您可以创建“npm express socketIOTest”
我们还可以在制作 express 应用程序时设置视图引擎:
设置视图引擎(可选)
npm express socketIOTest --view=jade
安装socket IO:
npm install socket.io --save npm install
创建套接字服务器的步骤:
- 转到 App.js 文件并将 Socket.IO 和 http 模块导入为:
var http=require("http"); var socketio=require("socket.io");
- 创建套接字 IO 服务器:
var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var http = require("http"); var socketio = require("socket.io"); var app = express(); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); // Create the http server const server = require('http').createServer(app); // Create the Socket IO server on // the top of http server const io = socketio(server); // View engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); // Catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // Error handler app.use(function (err, req, res, next) { // Set locals, only providing error // in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = { app: app, server: server };
- 现在转到 BIN 文件夹中的 www 文件,并将代码替换为以下代码:
#!/usr/bin/env node // Module dependencies var app = require('../app').app; var debug = require('debug')('socketiotest:server'); var http = require('http'); // Get port from environment and store in Express var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); // Create HTTP server var server = require("../app").server; // Listen on provided port, on all // network interfaces. server.listen(port); server.on('error', onError); server.on('listening', onListening); // Normalize a port into a number, // string, or false. function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { // Named pipe return val; } if (port >= 0) { // Port number return port; } return false; } // Event listener for HTTP server "error" event function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // Handle specific listen errors with // friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } // Event listener for HTTP server "listening" event. function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); }
这就是您可以将 Socket.IO 与 express 服务器链接的方式。