首页 > 解决方案 > 使用 Node.Js 在服务器端未触发套接字函数

问题描述

我是一个普通的 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 是否可以通过防火墙访问,并且它在公共和私有网络上都可以访问。无论如何我禁用了防火墙并对其进行了测试,但仍然没有来自服务器的响应。我更改了代码并将函数放入可点击事件中,以防在建立连接之前调用处理得太快,但这也没有起到任何作用。我将发出命令更改为发送命令,以查看是否有所不同,但没有。解决方案是一个笨蛋。我在 Windows 10 上写这段代码,我在 Edge 和 Chrome 中都测试过,结果还是一样......

标签: javascriptnode.jswebsocket

解决方案


可能是客户端代码中的问题。连接到服务器也是异步的。

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


推荐阅读