最近,我一直在尝试使用Node.js和Socket.io。成功地,我已经能够实现这些,但仅限于localhost。现在我想在我的专用服务器上使用此功能。我从我自己的家里托管我的服务器,我不能让node和socket在localhost之外运行。这样做的重要性在于我可以在测试我的网站时使用两台不同的计算机。这是我的代码如下:
app.js:
var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
index.html:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
这些是直接从socket.io站点获取的样本。现在它适用于localhost,但不适用于外部。我无法在另一台计算机上使用它。我被建议将
var socket = io.connect('http://localhost:8080');
改为
var socket = io.connect('http://localhost:8080');
,但这会使浏览器抛出以下错误:
var socket = io.connect('http://mydomain.com:8080');
甚至在我的主服务器计算机上。我使用带mac mini btw的OSX服务器。
任何建议都将不胜感激:
答案 0 :(得分:0)
看起来你正在侦听端口80而不是8080,你需要将脚本块指向你的服务器,所以试试
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
需要
<script src="http://mydomain.com:80/socket.io/socket.io.js"></script>
或更好
<script src="/socket.io/socket.io.js"></script>
如果这不起作用,请确保检查调试器窗口的网络选项卡下的任何错误(假设您正在使用chrome)以确保正确加载该socket.io.js文件。 / p>
答案 1 :(得分:0)
如果服务器地址与加载js的地址相同,则无需指定服务器地址:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
但您需要为浏览器提供http://mydomain.com/socket.io/socket.io.js。
答案 2 :(得分:0)
确定。尝试运行此代码:
filename:package.json
{
"name": "test-socketio"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"socket.io": "*"
},
"engines": {
"node": "0.8.x"
,"npm" : "*"
}
}
filename:app.js
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log("Recevied: 'my other event'");
console.log(data);
});
});
filename:index.html
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect();
socket.on('news', function (data) {
console.log("Received news event");
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
然后在代码目录中运行:
npm install
并运行:
sudo node app.js
请记住,您需要拥有root权限才能开始侦听端口80。