Как я могу подключиться к установленному серверу (НЕ localhost) с помощью node.js & socket.io?
Я очень новичок в веб-серверах / node.js / socket.io и пытаюсь сделать очень простой веб-сайт, просто чтобы научиться соединять 2 человек. Все учебники, которые я нашел, научат вас запускать ваше приложение на локальном хосте, но я хочу запустить его на сервере, чтобы каждый мог получить к нему доступ.
Я нашел этот хостинг-сайт - Zeit-Now - и сумел вывести свой сайт в интернет. Мой сайт прекрасно работает на localhost, но я не могу заставить его работать, когда выкладываю его в сеть. Я думаю, что проблема в этих 2 строках в моем коде, где '???' находятся.
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 ответа
Попробуй это
const app = экспресс ();
const server = http.createServer(приложение);
const io = socketio(сервер);
server.listen(80, '0.0.0.0');
Я полагаю, что проблема, с которой вы сталкиваетесь в данный момент, заключается в том, что вы хотите запустить сервер прямо на сайте. Но он должен быть запущен узлом следующим образом: node index.js
,
Поэтому вам нужен доступ к серверу, например, доступ по ssh, а затем запустить его с помощью команды, указанной выше. На основании логов могу сказать, что клиент не может найти сервер.
Вы также должны убедиться, что он решает правильный путь.
Начни с app.listen(80)
а затем попробуйте подключиться кhttps://web-socket-2.quaei.now.sh:80
Убедитесь, что на вашем сервере включены веб-сокеты. (На самом деле он не нуждается в веб-сокетах, но по возможности будет использовать его для лучшей транспортировки)
Читая о 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}`);
}