У меня вопрос: можно ли запустить socket.io lib без использования экспресс? Дело в том, что я хочу сделать node в качестве внешнего сервера веб-сокетов, который просто получает соединение с сокетами и обратные вызовы и просто отвечает на них, а не для создания собственных маршрутов или отправки просмотра страницы (я использую codeigniter для этой работы).
Мое текущее тестовое приложение на сервере выглядит так:
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 4000;
server.listen(port, function() {
console.info('Server listening at port %d', port);
});
io.on("connection", function (socket) {
console.info('A new socket has joined: ' + socket.id);
var tweet = {user: "nodesource", text: "Hello, world!"};
// to make things interesting, have it send every second
var interval = setInterval(function () {
socket.emit("tweet", tweet);
}, 1000);
socket.on("disconnect", function () {
clearInterval(interval);
});
});
На клиенте:
<script>
const socket = io('http://localhost:4000/node_server');
socket.on('disconnect',function(){
alert('Im not connected, server is down');
});
socket.on("tweet", function(tweet) {
// todo: add the tweet as a DOM node
console.info("tweet from", tweet.username);
console.info("contents:", tweet.text);
});
Моя проблема в том, что я протестировал с выражением примера чата socket.io, и он работает, но они используют маршрут и отправляют страницу, и в моем случае я просто хочу, чтобы моя другая внешняя страница общалась с узлом, а не узел отправлял мне страницу . В основном, когда я запускаю какой-либо излучатель или функцию на сервере или клиенте, он не срабатывает только на сервере, соединение, но ничего больше (p.s: также использовал io.sockets.on и тоже не работает) Если кто-то прошел это и знает, в чем может быть моя проблема, я буду рад.
Поскольку фактический клиент - это index.html, расположенный в другой папке, а node_server - это то место, где модули index.js и node должны иметь возможность запускать сервер. Дело не в этом, дело в том, что сокеты подключаются, и вы видите событие, запущенное на консоли узла, что означает, что сокет подключен на стороне сервера, но он не запускает функцию подключения клиента или обратные вызовы, которые я помещаю туда, и я уже протестировал несколько
Папка / файл клиента находится на том же хосте, но скоро это будут разные хосты, но дело не в пути, на самом деле триггеры не работают, когда у меня стабильное соединение
Другое дело, клиент socket.connected возвращает false, что означает, что сокет не подключен, но на сервере он регистрируется и запускается при подключении, поэтому я не могу понять, что происходит
Я думаю, здесь может быть некоторая путаница, но из того, что я могу понять, похоже, что вы просто хотите отделить клиента от сервера, потому что они размещены на двух разных машинах. Так ли это? Если да, я могу написать вам быстрый пример.
Да, в основном дело в том, что я использую платформу MVC (php), которая будет возвращать представление, и я не хочу выражать эту грязную работу за меня, поэтому, на мой взгляд, я хочу добавить скрипт, который подключается к внешнему сервер, который просто получает и отправляет данные через сокеты (как сервер с узлом)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хорошо, давайте начнем с чего-то действительно простого, вот наш экспресс-сервер, на котором размещается только наше приложение для сокетов:
var app = require("express")();
var server = require("http").createServer(app);
var io = require("socket.io")(server);
var port = process.env.PORT || 4000;
server.listen(port, function() {
console.info("Server listening at port %d", port);
});
io.on("connection", function(socket) {
console.info("A new socket has joined: " + socket.id);
socket.on("hello", function(data) {
console.info(data);
});
});
Вы уже это понимаете, но важно отметить, что этот сервер будет прослушивать любые сокетные соединения с любого адреса. Об этом важно помнить.
Теперь посмотрим на клиентский html файл.
<html>
<body>
<button id = "hiBtn">Say Hi to your server</button>
<!-- You only need to include the client file here -->
<script src = "https://rawgit.com/socketio/socket.io-client/master/dist/socket.io.js" </script>
</script>
<script>
const serverLocation = "localhost:4000" // or whatever your server location is
const socket = io(serverLocation);
window.onload = function () {
document.getElementById("hiBtn").addEventListener("click", function () {
socket.emit("hello", "Hi there, this is the client speaking");
})
}
</script>
</body>
</html>
Обратите внимание, что у меня нет <script src = "/socket/socket.io">, это потому, что этот html-файл размещается на совершенно отдельном клиенте. Вам нужно просто включить сюда клиентский файл socket.io, который обычно находится в node_modules\socket.io-client\dist\socket.io.js, если вы установили его через NPM. Или вы можете использовать URL-адрес, который я предоставил в моем примере. Просто убедитесь, что serverLocation указывает на ваш экспресс-сервер, и все готово.
P.S. в этом примере я протестировал его, разместив html-файл на порту: 5000 и экспресс-сервер на порту: 4000, если вам было интересно.
Это не то, что я ищу, это то, что показывает каждый пример документа о том, что клиент и сервер находятся в папке diff или что-то еще. Я не хочу использовать экспресс, потому что у меня есть мой php, на котором размещены представления, и у этих представлений есть скрипт для подключения к вводу-выводу. например, мое представление php находится в локальный / платформа / index.html, а мой узел находится в localhost / node_server, и поэтому я пытался подключиться к порту: 4000 специально для этой папки
Это было упоминание папки в URL-адресе подключения.
Если вы настраиваете это приложение как отдельное приложение, действительно ли имеет значение, какое серверное программное обеспечение вы используете? И почему вы слушаете
http://localhost:4000/node_serverвместоhttp://localhost:4000? Простой http-сервер был бы болью imo.