Попытка реализовать Node.js и Socket.io на выделенном сервере
Недавно я экспериментировал с Node.js и Socket.io. Успешно я смог реализовать их, но только на локальном хосте. Теперь я хотел бы использовать эту функцию на моем выделенном сервере. Я размещаю свой сервер из собственного дома, и я не могу заставить узел и сокет работать за пределами 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. Теперь это работает на локальном хосте, но не внешне. Я не могу использовать его на другом компьютере. Мне посоветовали поменять
var socket = io.connect('http://localhost:8080');
вvar socket = io.connect('http://mydomain.com:8080');
, но это заставляет браузер выдавать следующие ошибки: Uncaught ReferenceError: io is not defined mydomain.com/:3
GET http://mydomain.com/socket.io/socket.io.js mydomain.com/:1
даже на моем главном сервере. Я использую сервер OSX с Mac Mini, кстати.
Любой совет будет принят во внимание:
3 ответа
Похоже, что вы слушаете порт 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.
Вам не нужно указывать адрес сервера, если он совпадает с местом загрузки 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 доступным для вашего браузера.
Хорошо. попробуйте запустить этот код:
имя файла: package.json
{
"name": "test-socketio"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"socket.io": "*"
},
"engines": {
"node": "0.8.x"
,"npm" : "*"
}
}
имя файла: 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);
});
});
имя файла: 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.