Nodejs 自己写的代码想公用 ,但是想在外面使用socket.io去listen 这个httpserver这块代码该怎么改呢?
Nodejs 自己写的代码想公用 ,但是想在外面使用socket.io去listen 这个httpserver这块代码该怎么改呢?
server.js
var http = require(“http”); var url = require(“url”); var fs = require(“fs”); function start(pages, port) { function onRequest(request, response) { fs.readFile(__dirname+"/"+pages,function(err,data){ if(err){ response.writeHead(500); } response.writeHead(200, { “Content-Type”: “text/html” }); response.end(data); }) } http.createServer(onRequest).listen(port) console.log(“Server has started.”); } exports.start = start;
app.js
var server = require("./server"); server.start(“index.html”, 8888); var io = require(“socket.io”).listen(server)
要实现你的需求,即在 server.js
中创建一个 HTTP 服务器,并且允许外部的 app.js
使用 socket.io
来监听这个 HTTP 服务器,你需要对代码进行一些调整。以下是具体的修改步骤:
修改后的 server.js
首先,在 server.js
中创建一个 HTTP 服务器,并将其导出,以便外部文件可以使用它。
// server.js
var http = require('http');
var url = require('url');
var fs = require('fs');
function start(pages, port) {
function onRequest(request, response) {
fs.readFile(__dirname + "/" + pages, function (err, data) {
if (err) {
response.writeHead(500);
} else {
response.writeHead(200, {
'Content-Type': 'text/html'
});
response.end(data);
}
});
}
// 创建 HTTP 服务器并返回
var server = http.createServer(onRequest);
return server;
}
exports.start = start;
修改后的 app.js
在 app.js
中,导入 server.js
并启动 HTTP 服务器,然后使用 socket.io
监听这个服务器。
// app.js
var serverModule = require('./server');
var io = require('socket.io');
// 启动 HTTP 服务器
var server = serverModule.start("index.html", 8888);
// 使用 socket.io 监听这个服务器
io.listen(server);
console.log("Server is listening on port 8888 with socket.io");
// 可以在这里添加 socket.io 的事件处理逻辑
server.on('connection', function(socket) {
console.log('A client connected!');
socket.on('disconnect', function() {
console.log('Client disconnected');
});
});
解释
-
server.js
:start
函数现在返回创建的 HTTP 服务器实例。- 通过
return server;
将服务器实例返回给调用者。
-
app.js
:- 引入
server.js
模块,并调用start
方法来启动 HTTP 服务器。 - 使用
io.listen(server);
将socket.io
绑定到这个 HTTP 服务器上。 - 添加了简单的连接和断开事件处理逻辑作为示例。
- 引入
这样,你就可以在 server.js
中创建 HTTP 服务器,并在 app.js
中使用 socket.io
来监听这个服务器。
在你的当前实现中,server.js
文件导出了一个 start
函数,用于创建并监听 HTTP 服务器。但是,你想在 app.js
中同时使用 HTTP 服务器和 Socket.IO。你需要将 HTTP 服务器的创建与 Socket.IO 的监听分开来处理。
示例代码
server.js
var http = require('http');
var url = require('url');
var fs = require('fs');
function start(pages, port, io) {
function onRequest(request, response) {
fs.readFile(__dirname + "/" + pages, function (err, data) {
if (err) {
response.writeHead(500);
} else {
response.writeHead(200, {
"Content-Type": "text/html"
});
response.end(data);
}
});
}
var server = http.createServer(onRequest);
// 将 HTTP 服务器传给 Socket.IO
io.attach(server);
server.listen(port, () => {
console.log(`Server has started on port ${port}`);
});
}
exports.start = start;
app.js
var server = require("./server");
var io = require("socket.io")();
server.start("index.html", 8888, io);
// 可以在这里添加 Socket.IO 监听事件
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
解释
-
server.js:
-
app.js:
这样,你就可以在一个地方设置 HTTP 服务器,在另一个地方设置 Socket.IO,并将它们结合起来工作。