以下是将 Socket.io 添加到新生成的 Express-Generator 应用程序的方法:
- 创建一个包含 socket.io 逻辑的文件,例如
socketapi.js
:
socketapi.js:
const io = require( "socket.io" )();
const socketapi = {
io: io
};
// Add your socket.io logic here!
io.on( "connection", function( socket ) {
console.log( "A user connected" );
});
// end of socket.io logic
module.exports = socketapi;
- 修改您的
bin/www
启动器。有两个步骤:需要您的 Socket.io api 并在创建 HTTP 服务器后立即将 HTTP 服务器附加到您的 socket.io 实例:
垃圾箱/万维网:
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('socketexpress:server');
var http = require('http');
let socketapi = require("../socketapi"); // <== Add this line
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
socketapi.io.attach(server); // <== Also add this line
(...)
- 然后你只需要在你的 index.html 中添加 Socket.io 客户端。在
</body>
结束标记之前添加以下内容:
索引.html
(...)
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
</script>
</body>
</html>
- 最后你可以启动你的 Express 服务器:
- 基于Unix:
DEBUG=myapp:* npm start
- 视窗:
set DEBUG=myapp:* & npm start
注 1
如果由于某种原因,你需要访问您的套接字API app.js
,那么你可以导入,而不是在你的套接字API app.js
,并重新将其导出:
应用程序.js
var express = require('express');
var socketapi = require("./socketapi"); // <== Add this line
(...)
// You can now access socket.io through the socketapi.io object
(...)
module.exports = { app, socketapi }; // <== Export your app and re-export your socket API here
然后在您的bin/www
启动器中,不要在自己的行中导入您的套接字 api,只需将其导入您的应用程序:
垃圾箱/万维网
var {app, socketapi} = require('../app'); // <== Import your app and socket api like this
(...)
var server = http.createServer(app);
socketapi.io.attach(server); // <== You still have to attach your HTTP server to your socket.io instance
注 2
此答案已更新以适用于最新的 Express Generator(撰写本文时为 4.16)和最新的 Socket.io(撰写本文时为 3.0.5)。