我的客户端app.html:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://mywebsite.com/');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
我的服务器端app.js:
var express = require('express')
, http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(process.env.PORT || 8888);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/app.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
如果我转到http://mywebsite.com:8888,控制台会显示:
Object {hello: "world"}
但如果我转到http://mywebsite.com/app.html,控制台会显示:
GET http://mywebsite.com/socket.io/socket.io.js 404 (Not Found)
Uncaught ReferenceError: io is not defined
已经在这里被https://stackoverflow.com/a/10192084/990434了,我已经表达了v3.1.1,我也试过这个答案https://stackoverflow.com/a/14167488/990434无济于事。我已经尝试了一些谷歌小组中的其他随机内容,这些内容在我漫长的凌乱历史中似乎无法找到。任何想法如何解决这个问题?
答案 0 :(得分:1)
您会混淆服务器上存储的文件和服务器所服务的路由。虽然app.html
是您服务器上的文件,但您的服务器不会响应/app.html
的请求。相反,当请求到达/
时,您的服务器会发送文件app.html
。实际上,客户端/收件人永远不会知道它接收的文件在您的服务器上被称为app.html
。因此,当客户端(浏览器)转到http://mywebsite.com:8888
时,他们会获得具有script
标记的html文件。这些script
标记的代码使您的浏览器连接到socket.io,编程为'connection'
,向客户端发送消息:
socket.emit('news', { hello: 'world' });
然后,浏览器中运行的客户端代码会收到消息
socket.on('news', function (data) {
console.log(data);
然后将消息发送回服务器
socket.emit('my other event', { my: 'data' });
一切都按照程序运作。但是,您的服务器上没有“路由器”可以收听/app.html