Ответ 1
Если ваш script не поступает с вашего веб-сервера, это не сработает:
<script src="/socket.io/socket.io.js"></script>
Вы должны явно указать хост и порт:
<script src="http://localhost:<port>/socket.io/socket.io.js"></script>
Я пытаюсь заставить socket.io работать, но теперь в Chrome я получаю сообщение об ошибке:
Неподготовлено ReferenceError: require не определен
client.php: 9Uncaught ReferenceError: io не определен
Я изменил способ включения файла socket.io.js, поскольку он dosnt существует где-то еще:
<script src="/node_modules/socket.io/lib/socket.io.js"></script>
Если я попробую
<script src="/socket.io/socket.io.js"></script>
Я получаю: Не удалось загрузить ресурс: сервер ответил статусом 404 (не найден)
Это на Ubuntu с последним из всех
Я использую код сервера http://socket.io/ для работы в той же папке, что и client.php, и это работает, именованный сервер .js, только измененный порт.
Если ваш script не поступает с вашего веб-сервера, это не сработает:
<script src="/socket.io/socket.io.js"></script>
Вы должны явно указать хост и порт:
<script src="http://localhost:<port>/socket.io/socket.io.js"></script>
Вы используете node.js вдоль PHP на своем сервере?
Существует два пакета socket.io, сервер и клиент. Вы пытаетесь загрузить сервер один (/node_modules/socket.io/lib/socket.io.js
) в браузере. script, который вы хотите, называется socket.io-client, и вы можете найти его на https://raw.github.com/LearnBoost/socket.io-client/master/socket.io-client.js p >
Что происходит, так это то, что socket.io автоматически обслуживает файл /socket.io/socket.io.js
(клиентский) с порта 80 , когда вы используете node на порту 80. В вашем случае Apache уже находится в порту 80, поэтому вам нужно вручную отсылать файл из него.
Ваша библиотека включает (/socket.io/socket.io.js
) в кодировке вашего браузера клиента, вероятно, хорошо.
Но вы можете указать неверную копию socket.io.js
Если вы установили socket.io
с помощью (npm install socket.io
), вы можете посмотреть в следующем каталоге для клиентской версии socket.io.js
:
C:\Program Files (x86)\nodejs\node_modules\socket.io\node_modules\socket.io-client\dist\socket.io.js
Если его там, то вы можете захотеть скопировать этот модуль в каталог веб-публикации, ИЛИ в качестве альтернативы вы можете изменить физический путь, на который указывает ваш виртуальный каталог.
Я пробовал, что говорит, и он работает. Мне нужно было указать хост и порт. Для приложения node, прослушивающего порт 81, мне нужно было указать порт 81 в javascript клиента. Nevermind/socket.io/socket.io.js не существует в vhost, node компенсирует его во время выполнения.
Как отмечали другие, когда io запускается на стороне сервера, обслуживается "автоматическая" служба "socket.io.js", и она разветвляется на другие js файлы в каталоге lib.
Что я хочу добавить, так это то, что это неинтересно, и нет, у вас не может быть ваш обычный вебсервер, который обслуживает этот файл - ошибки просто становятся более странными и кажущимися противоречивыми (не требуют определения и т.д.). Это не обычный файл js, и я хочу, чтобы все учебные пособия там подчеркивали это.
Во всяком случае, если вы работаете за nginx, например, установите параметры порта в тот же порт, что и для node - порт 3000, в моем случае. Я использовал этот порт в клиенте следующим образом:
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
... а затем также использовал порт 3000 в коде сервера - существует слишком много способов/версий, которые вы можете закодировать на сервере-js-code для примера, чтобы сделать что-либо, но путать большинство, кто использует "по-другому",.
Если вы видите что-то вроде require() is not defined
, возможно, это потому, что используемая вами библиотека JavaScript находится в формате AMD (определение асинхронного модуля). Попробуйте использовать RequireJS (полнофункциональный) или локон JS-библиотеки (меньше, проще) для загрузки SocketIO.
У меня была та же проблема, и я подтверждаю, что решение @thejh сработало. Однако я не знал, что такое сервер, когда я читаю его рекомендацию. У меня есть MAMP, работающий на порту 80. И нижеприведенный код будет "node.js-сервер", который работает на порту 8001.
Как только я запустил сервер node.js(выполнил код ниже), посещение http://localhost:4001/socket.io/socket.io.js возвращает файл javascript.
/* Node.js server */
var sys = require('sys');
var io = require('socket.io');
var http = require('http')
server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('http server started');
res.end();
});
server.listen(4001);
// socket.io
var socket = io.listen(server);
socket.on('connection', function(client) {
client.on('message', function(message) {
// We're in!
console.log('received client message '+ message);
});
client.on('disconnect', function() {});
socket.send('welcome to the local node.js server!');
});
Для тех, кто находится внутри Drupal, a drupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY));
внутри hook_init
выполняет трюк.
На самом деле мне удавалось заставить Apache обслуживать эти файлы сегодня. Фактически.
Просто создайте копию (я на самом деле скопировал файлы, мягкие ссылки могут быть в порядке, я не пытался) содержимого node_modules/socket.io/node_modules/socket.io-client/dist для вашего веб-корня. Для моей установки socket.io(0.9.16), где я установил socket.io глобально, эти две команды выполнили трюк:
sudo cp -av /usr/lib/node_modules/socket.io/node_modules/socket.io-client/dist /var/www/socket.io
chown -R www-data:www-data /var/www/socket.io
В окне Ubuntu 13.10 был установлен обычный стек LAMP, после чего я добавил node.js.
Теперь сохранение этой копии в синхронизации при выпуске новых версий socket.io - проблема, которую я еще не пытался решить.
Приветствия