2017-02-18 6 views
-1

У меня возникли проблемы с подключением к сокету io и экспресс-серверу со следующим кодом. я могу подключиться к веб-странице/API в браузере, но как только я пытаюсь соединиться с сокет-соединение с index.html ввода получить ошибки следующим образомПолучение ошибки 404 при попытке подключения к сокету io/express server

это мои «server.js»

var WebSocketServer = require('uws').Server, 
    express   = require('express'), 
    path   = require('path'), 
    app    = express(), 
    server   = require('http').createServer(), 
    createEngine = require('node-twig').createEngine; 

app.engine('.twig', createEngine({ 
    root: __dirname + '/public', 
})); 

app.set('views', './public'); 
app.set('view engine', 'twig'); 

var cors = require('cors'); 
app.use(cors()); 

app.use(require('./routes')); 
app.use(require('./api')); 

app.use(express.static(path.join(__dirname, '/public'))); 

app.use("/admin", express.static(__dirname + '/public')); 
app.use("/admin/scss", express.static(__dirname + '/scss')); 
app.use("/admin/vendors", express.static(__dirname + '/vendors')); 
app.use("/admin/js", express.static(__dirname + '/js')); 
app.use("/admin/build", express.static(__dirname + '/build')); 

app.use("/scss", express.static(__dirname + '/scss')); 
app.use("/vendors", express.static(__dirname + '/vendors')); 
app.use("/js", express.static(__dirname + '/js')); 
app.use("/build", express.static(__dirname + '/build')); 

var wss = new WebSocketServer({server: server}); 

wss.on('connection', function (ws) { 

    ws.on('join', function() { 
     console.log('SOMEONE JUST JOINED'); 
    }); 

    ws.on('close', function() { 
     console.log('stopping client interval'); 
     clearInterval(id); 
    }); 
}); 

server.on('request', app); 

server.listen(8080, function() { 
    console.log('Listening on http://localhost:8080'); 
}); 

и это мой файл index.html:

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 

<script type="text/javascript"> 

var so = io.connect('http://192.168.***.***:8080/'); 

so.on('connect',() => { 
    so.emit('join'); 
}); 

</scrip> 

это ошибка, я получаю:

XMLHttpRequest cannot load http://localhost:8080/socket.io/?EIO=3&transport=polling&t=LfHXP1O. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://192.168.4.149:8080' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute. 

и иногда я получаю эту ошибку:

Failed to load resource: the server responded with a status of 404 (Not Found) 

решения:

<script> 
     var host = window.document.location.host.replace(/:.*/, ''); 
     var server = new WebSocket('ws://' + host + ':8080'); 
     server.onmessage = function (event) { 
     updateStats(JSON.parse(event.data)); 
     }; 

     server.onopen = function (event) {}; 


    </script> 

ответ

0

Вы пытаетесь использовать socket.io на стороне клиента для подключения к простому серверу WebSocket на заднем конце. Вы не можете этого сделать. socket.io - это слой поверх webSocket, поэтому вам нужно использовать простой webSocket для подключения к простому серверу webSocket или socket.io в клиенте для подключения к серверу socket.io на внутреннем сервере.

Я предлагаю вам изменить свой сервер, чтобы использовать socket.io для сервера socket.io вместо простого сервера webSocket.

Ошибки, которые вы получаете, связаны с тем, что клиент socket.io ожидает, что сможет выполнить определенный HTTP-запрос, который будет обрабатывать сервер socket.io, но поскольку у вас нет сервера socket.io, это Запрос URL-адреса на сервере не обрабатывается.

+0

HI там. Спасибо за ваш ответ. 1. Я, хотя var wss = new WebSocketServer ({server: server}); была реализация socket.io в задней части, но просто оптимизирована. 2. Сказать, что я хотел сохранить сервер как есть, как именно я мог бы подключиться к нему со стороны клиента? Im совершенно новый со всеми портированием и веб-сайтами и т. Д. – TheMan68

Смежные вопросы