浏览器找不到客户端的socket.io.js:
<script src="/socket.io/socket.io.js"></script>
创建没有处理程序的服务器时:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs');
app.listen(80);
//without this part:
/*function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}*/
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
我不需要也不需要处理函数,因为我在PHP中生成了所有内容。有时将客户端应用程序函数用于另一个文件而不是index.html / php
那么如何让浏览器找到socket.io.js?
答案 0 :(得分:1)
在您的客户端包含此内容!
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
var io = io.connect();
答案 1 :(得分:0)
如果您不需要访问http模块功能,请使用以下方式:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
答案 2 :(得分:0)
我有wrote一个演示应用程序,如果您不想在开始使用socket.io和Express 3时花费太多时间,可以查看。
要让客户端js工作的websockets需要从Web服务器传递。这是许多浏览器限制之一。 最简单的设置是让节点服务器同时提供客户端Js和WebSockets。使用Express的http模块更容易(有点矫枉过正,但如果你想构建的不仅仅是一个测试应用程序,那么超级实用)。
另外,你需要让你的客户端js指向正确的位置。例如,如果您运行端口8080的socket.io服务器,并在端口8000上交付静态客户端(例如使用python -m SimpleHTTPServer
或使用常规apache使用端口80)。
<script src="http://localhost:8080/socket.io/socket.io.js"></script>