2
我正尝试将本地计算机上的Chrome浏览器连接到带有socket.io的远程节点服务器。我使用expressjs提供所有关于我的节点服务器的文件,所以我有一个带有html和js文件的公共目录(我创建了一个到npm的node_modules下的socket.io文件的符号链接)。socket.io远程客户端不能正常工作
我遇到的问题是,当浏览器拉我的index.html我得到以下错误:
未捕获的ReferenceError:要求没有定义socket.io.js:12 未捕获的ReferenceError:IO不定义为
我尝试了像其他几个职位的CDN,但导致了另一个问题。许多帖子都提倡这种方法,所以我不确定为什么它不解决nodejs的问题。有任何想法吗?
这里是我的index.html的样子:
<html>
<head>
</head>
<body>
<script src="http://nodeserver:8080/socket.io/lib/socket.io.js"></script>
<script>
var socket = io.connect('http://nodeserver:8080');
socket.on('', function (data) {
console.log(data);
socket.emit('update checkins', { my: 'data' });
});
</script>
<h2>Test Page</h2>
</body>
</html>
我的服务器代码如下所示:
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
// Get the environment variables we need.
var ipaddr = process.env.VCAP_APP_HOST || 'myserver.com';
var port = process.env.PORT || 8080;
app.configure(function() {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
// set up the RESTful API, handler methods are defined in api.js
var api = require('./controller/api.js');
app.get('/foursq', api.list);
// Set Socket.io
io.sockets.on('connection', function (socket) {
console.log('Socket created...');
socket.emit('welcome', {welcome: 'you'});
socket.on('update checkins', function (msg) {
socket.broadcast.emit('checkins', api.list);
});
});
// And start the app on that interface (and port).
app.listen(port, ipaddr, function() {
console.log('%s: Foursquare Node server started on %s:%d ...', Date(Date.now()),
ipaddr, port);
});
在客户端,你应该使用''这是由socket.io服务器服务的客户端js。 – billy
你的意思是它由socket.io服务器提供服务?我发现我明确地必须将socket.io-client/dist/socket.io.js文件放在我的公共目录中,这样我才能得到404。那是你在做什么? – occasl
不,您不必在公用目录中复制socket.io文件。 socket.io应该用它的客户端文件来响应'/ socket.io/socket.io.js':http://socket.io/有一个工作示例 – billy