Как я могу подключиться к установленному серверу (НЕ localhost) с помощью node.js & socket.io? - PullRequest
1 голос
/ 11 июня 2019

Я очень новичок в веб-серверах / node.js / socket.io и пытаюсь сделать очень простой веб-сайт, просто чтобы научиться соединять 2 человек.Все учебники, которые я нашел, научат вас запускать ваше приложение на локальном хосте, но я хочу запустить его на сервере, чтобы каждый мог получить к нему доступ.

Я нашел этот хостинг-сайт - Zeit-Now - иудалось вывести мой сайт в интернет.Мой сайт прекрасно работает на localhost, но я не могу заставить его работать, когда выкладываю его в сеть.Я думаю, что проблема в этих 2 строках в моем коде, где '???'are.

index.html:

<!DOCTYPE html>

<html>

<head>
    <title>A2</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
</head>

<body>
    <input id="sendMsg" type="text" placeholder="TYPE TO SEND">
    <input id="receiveMsg" type="text" placeholder="RECEIVE HERE">
    <button id="sendBtn">Send</button>

    <script>

var socket = io.connect('https://web-socket-2.quaei.now.sh/');

var sendMsg = document.getElementById('sendMsg');
var receiveMsg = document.getElementById('receiveMsg');
var sendBtn = document.getElementById('sendBtn');

// Emit events
sendBtn.addEventListener('click', () => {
    socket.emit('chat', {
        message: sendMsg.value
    });
});

// Listen for events
socket.on('chat', data => {
    receiveMsg.value = data.message;
});

    </script>
</body>

</html>

index.js:

const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);

app.use(express.static('public'));

io.on('connection', socket => {
    console.log('Connection! ->', socket.id);

    socket.on('chat', data => {
        io.sockets.emit('chat', data);
    });
});

Я также пробовал:

var socket = io.connect(https://web-socket-2.quaei.now.sh/);

и

var server = app.listen(80, https://web-socket-2.quaei.now.sh/);

Я ожидаю, что мой веб-сайт будет читать то, что написано в первом поле ввода, и выводить его во второе при нажатии кнопки отправки (что прекрасно работает на локальном хосте), но это не работает, когда я помещаюон-лайн с Zeit-Now.

Редактировать:

now.json:

{
    "version": 2,
    "name": "web-socket-2",
    "builds": [{
            "src": "public/**/*",
            "use": "@now/static"
        },
        {
            "src": "*.js",
            "use": "@now/node"
        }
    ],
    "routes": [{
        "src": "/",
        "dest": "public/index.html"
    }]
}

У меня есть папка #websocket-2 с now.json, index.js иpublic папка.В папке public у меня есть index.html.

Как мне заставить его работать на этом сайте: https://web -socket-2.quaei.now.sh / ?

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

попробуйте

const app = express ();

const server = http.createServer (app);

const io = socketio (сервер);

server.listen (80, '0.0.0.0');

0 голосов
/ 11 июня 2019

Убедитесь, что на вашем сервере включены веб-сокеты. (На самом деле он не нуждается в веб-сокетах, но будет использовать его, если это возможно, для лучшей транспортировки)

Читая о zeit.co Я вижу, что они не поддерживают веб-сокеты, но не уверен, что они также поддерживают sucket. Я бы порекомендовал вам связаться с ними по электронной почте, чтобы подтвердить это, если приведенный ниже код вам не поможет.

Чтобы запустить соединение на стороне клиента, после того как вы установили socket.io-client или после того, как включили скрипт в заголовок, который у вас есть.

Вы просто подключаетесь с помощью io.connect ('SERVER URL'), который возвращает ваш экземпляр сокет-соединения. (нет необходимости проходить сервер, если работает на том же сервере)

const socket = io.connect('http://youserver.com'); 
// You can listen to conenct and disconnect to track your connection
socket.on('connect', socket => {
    console.log('Connected', socket.id); 
});

Это на стороне клиента.

На стороне сервера вам необходимо передать сервер в ваш модуль socket.io

const io = require('socket.io')(server);
// You can listen to your socket connecting through connect and disconnect
io.on('connect', (socket) => {
  console.log('socket connected', socket);
});

Вы можете отслеживать свои ошибки на стороне клиента, используя событие error, и обязательно проверьте свою консоль, чтобы увидеть журналы о соединении.

В случае, если вы используете экспресс-сервер, и сокет вызывает 404 ошибки в консоли, убедитесь, что вы запускаете сервер, используя http вместо экспресс.

const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server); 

// your socket and routes

server.listen(process.env.PORT || 3500, () => {
   console.log(`Localhost working on ${process.env.PORT || 3500}`);
}
0 голосов
/ 11 июня 2019

Полагаю, проблема, с которой вы сейчас сталкиваетесь, заключается в том, что вы хотите запустить сервер прямо на веб-сайте.Но он должен быть запущен узлом следующим образом: node index.js.
Поэтому вам нужен доступ к серверу, например, доступ по ssh, а затем запустить его там с помощью команды, указанной выше.На основании логов могу сказать, что клиент не может найти сервер.
Вам также необходимо убедиться, что он разрешается в правильном направлении.
Запустите его с app.listen(80), а затем попробуйте подключиться к https://web-socket-2.quaei.now.sh:80

...