Функция сокета не запускается на стороне сервера с использованием Node.Js - PullRequest
0 голосов
/ 09 ноября 2019

Я обычный JavaScripter, который только начал изучать, как использовать сокеты через Node JS. Мой код работает нормально, и клиент без проблем подключается к серверу, но я просто не могу заставить серверный код срабатывать при отправке с клиента. Я не получаю ошибок на консоли со стороны сервера или ошибок в инструментах разработчика от клиента. Отладчик показывает, что команда нормально отправляется с клиента, но, похоже, он не хочет запускаться на стороне сервера. Любые идеи относительно того, что я делаю здесь не так? Спасибо.

КЛИЕНТ:

<script src = "https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.js"> 

var socket = io.connect('http://localhost:1111/SystemAlpha.html');

SendData("NewPlayer");

function SendData(A) {

	if (A == "NewPlayer") { socket.emit('NewPlayer', {Map:System, Direction:Ship[1], Speed:Ship[2], X:Ship[4], Y:Ship[5] } ); }
}

СЕРВЕР:

var express = require('express');
var app = express();
var socket = require('socket.io');

var server = app.listen(1111, function() { console.log('Server Listening'); } );

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

var io = socket(server);

io.on('connection', function(socket) {

	socket.onerror = function(error){ console.log('Error detected: ' + error); }

	console.log('Client Connected');

	socket.on('NewPlayer', function(data) { console.log('Recieved'); });


});

Я получаю сообщение «Клиент подключен», но сообщение «Получено» никогда не поступает на консоль.

* РЕДАКТИРОВАНИЕ

Таким образом, после исчерпывающего поиска в течение 2 дней, в чем проблема, я не смог найти единого решения. Я нашел других, у которых была та же самая проблема, которые не могут передать от их клиента до сервера. По большей части, кажется, что это работает для большинства людей, но небольшая кучка не может заставить его работать, даже если их код в порядке. Я проверил вкладку сети в инструментах разработчика, и она не показывает никаких запросов, отправляемых на сервер, поэтому я предполагаю, что ошибка где-то на стороне клиента. Я дважды проверил, есть ли у node.js доступ через брандмауэр, и он есть в публичных и частных сетях. Я все равно отключил брандмауэр и протестировал его, но ответа от сервера по-прежнему не было. Я изменил код и поместил функцию в интерактивное событие на случай, если вызов обрабатывался слишком быстро, прежде чем было установлено соединение, но это тоже ничего не дало. Вместо этого я изменил команду emit на команду send, чтобы посмотреть, имеет ли это значение, но это не так. Решение глупее. Я пишу этот код на Windows 10, и я тестировал его как в Edge, так и в Chrome, и результат все тот же ......

1 Ответ

0 голосов
/ 09 ноября 2019

Может быть проблема в коде клиента. Подключение к серверу также асинхронно.

socket.on ("connect", function () {SendData ("NewPlayer");})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...