gpt4 book ai didi

javascript - NodeJS 和 Socket.IO 如何服务于 socket.io.js

转载 作者:搜寻专家 更新时间:2023-10-31 23:42:44 24 4
gpt4 key购买 nike

我正在通过遵循一本书(Learning Node)中的代码来学习 NodeJS 和 Socket.IO。这个例子奏效了。但我想知道该 Node 如何为声明中的 socket.io.js 文件提供服务 <script src="/socket.io/socket.io.js"></script>因为项目根目录中没有名为 socket.io 的文件夹,而且我没有任何代码写入服务器静态文件。这是通过 Socket.IO 模块完成的吗?如果我使用 express 来提供静态文件,会不会冲突?

客户端代码

<html lang="en">
<head>
<meta charset="utf-8">
<title>bi-directional communication</title>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8124');
socket.on('news', function (data) {
var html = '<p>' + data.news + '</p>';
document.getElementById("output").innerHTML=html;
socket.emit('echo', { back: data.news });
});
</script>
</head>
<body>
<div id="output"></div>
</body>
</html>

服务器端代码

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

var counter;
app.listen(8124);

function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
counter = 1;
res.writeHead(200);
res.end(data);
});
}

io.sockets.on('connection', function (socket) {
socket.emit('news', { news: 'world' });
socket.on('echo', function (data) {
if (counter <= 50) {
counter++;
console.log(data.back);
socket.emit('news', {news: data.back});
}
});
});

最佳答案

经过一番阅读,我得到了解释

在服务器应用程序中,当创建 HTTP Web 服务器时,它被传递给Socket.IO 的监听事件:

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)

发生的事情是 Socket.IO 拦截发送到 Web 服务器的请求并监听对于请求:

/socket.io/socket.io.js

Socket.IO 在幕后进行了一些巧妙的欺骗,以确定什么是重转入回应。如果客户端支持 WebSockets,返回的 JavaScript 文件是一种使用 WebSockets 实现客户端连接的方法。如果客户不支持 WebSockets,但支持 Forever iFrame (IE9),它返回特定的JavaScript 客户端代码等。

关于javascript - NodeJS 和 Socket.IO 如何服务于 socket.io.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26480991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com