#javascript #node.js #angularjs #socket.io
#javascript #node.js #angularjs #socket.io
Вопрос:
Я начинаю использовать NodeJS и Socket.IO . Я пытаюсь настроить базовый пример с HTTP-сервером NodeJS и установить сокет.Подключение ввода-вывода к серверу.
Я также использую angular JS, и в основном я хочу, чтобы, когда пользователь нажимает кнопку, устанавливалось соединение с сервером. Однако, когда я пытаюсь это сделать, я получаю эту ошибку
GET http://localhost/socket.io/?EIO=2amp;transport=pollingamp;t=1404288173776-3 net::ERR_CONNECTION_REFUSED
Вот мой код:
server.js
var http = require('http');
var server= http.createServer(handler);
var io = require('socket.io')(server);
server.listen(8080);
function handler(req, res) {
res.writeHead(200);
res.end('Hello Http');
}
io.on('connection', function (socket){
socket.emit('news', { hello: 'world' });
console.log('connected!');
});
app.js
var app = angular.module('testApp', ['ngRoute']);
app.controller('TestCtrl', function ($scope){
$scope.msg= "";
$scope.try = function (){
$scope.msg= "ALO"
var socket = io('http://localhost');
socket.on('news', function (data) {
console.log(data);
});
};
});
И на моем test.html файл:
<body ng-controller="TestCtrl">
<h2>{{msg}}</h2>
<button ng-click="try()">Try</button>
<script src="../js/angular.min.js"></script>
<script src="../js/angular-route.min.js"></script>
<script src="../js/app.js"></script>
<script src="../node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>
<!-- <script src="/socket.io/socket.io.js"></script> -->
</body>
Я думаю, что ошибка может быть связана с путем, который я использую при включении socket.io.js Я пытался также напрямую использовать localhost: 8080 в пути, потому что я читал, что это может быть решением, но это не сработало. Поэтому, пожалуйста, я ценю любую предоставленную помощь. Спасибо!
Комментарии:
1. У меня также была такая же ошибка. После этого сообщения я просто перепроверил URL, который я указал неверно. Спасибо.
Ответ №1:
Я столкнулся с точно такой же проблемой. Я не видел ОШИБКУ_CONNECTION_REFUSED в socket.io @ ~ 0.9. Ошибка появилась после того, как я обновил сокет.ввод-вывод до 1.3.
Я решил это, просто удалив URL из конструктора на стороне клиента:
Изменить
var socket = io('http://localhost');
Для
var socket = io();
Как сокет.руководство по вводу-выводу показало:http://socket.io/get-started/chat /
Комментарии:
1. Использование неявного URL-адреса также исправило это для меня, спасибо!
2. Хороший ответ. Просто дополняю то, что говорится в примере: «Обратите внимание, что я не указываю какой-либо URL-адрес при вызове io(), поскольку по умолчанию он пытается подключиться к хосту, который обслуживает страницу».
3. Как насчет использования другого порта или не размещенного на локальном?
Ответ №2:
Если ваш сервер прослушивает порт 8080, вам необходимо подключиться к этому порту.
var socket = io('http://localhost:8080');
И поскольку вы используете относительный путь, сокет.библиотека ввода-вывода будет обслуживаться нормально.
<script src="/socket.io/socket.io.js"></script>
Комментарии:
1. Я пробовал эти два решения раньше (извините, я не упомянул об этом), но я получаю ошибку file not found для socket.io.js путь, вот почему я попробовал другой. Я не знаю, в чем может быть проблема. Я установил сокет. ввод-вывод с помощью npm устанавливает сокет. ввод-вывод и папка node_modules, содержащая ввод-вывод сокета, по какой-то причине находятся в папке «Мои пользователи» в Windows, а не в папке node_modules, которая находится в program files. Может ли это иметь какое-то отношение к проблеме? Я попытался установить глобально, чтобы посмотреть, изменил ли он папку location, но этого не произошло: / Я не знаю, что еще попробовать
Ответ №3:
Оказывается, что сокет.ввод-вывод устанавливался в папку funny, и поэтому он не распознавался и не загружался. Я решил это, создав package.json и объявив там зависимости, чтобы при установке npm он устанавливал папку в нужном месте.
Также Бен Форчун был прав, и я также изменил это…Я надеюсь, что это поможет другим людям, потому что я много боролся, чтобы понять это 🙂
Ответ №4:
Я получал доступ к IP-адресу моего облачного сервера для общения. внезапно сервер перестал работать.Затем я получил эту ошибку опроса. Наконец я понял, что проблема с этим сервером. убедитесь, что ваш сервер включен.
Я изменил IP-адрес на ноль. пожалуйста, укажите адрес вашего сервера
socket = io.connect('0.0.0.0:8110');
Ответ №5:
const { Server } = require("socket.io");
const app = express();
let port = process.env.PORT || 8080;
const server = http.createServer(app);
server.listen(port, () => console.log("App listening at localhost:" port));
Это работает для меня 🙂
Смотрите документ
Ответ №6:
// SERVER running on http://localhost:9000
const PORT = 9000;
const http = require('http');
const httpServer = http.createServer()
const io = require("socket.io")(httpServer, {
cors: {
origin: "http://localhost:3000", // client address
},
});
io.on("connection", (socket) => {
console.log(socket)
})
httpServer.listen(PORT);
// CLIENT
import { io } from 'socket.io-client'
const URL = "http://localhost:9000";
const socket = io(URL, { autoConnect: false });
socket.connect();
console.log(socket)
socket.on("connect_error", (err) => {
console.log(`connect_error due to ${err.message}`);
});
Сокет должен прослушивать приложение (HTTPServer), а приложение должно прослушивать порт. Не перепутайте это