javascript - 使用 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 中都测试过,结果还是一样......
解决方案
可能是客户端代码中的问题。连接到服务器也是异步的。
socket.on("connect" , function () {SendData("NewPlayer");})
推荐阅读
- css - 将子菜单添加到现有导航
- javascript - React Native:你能强制 react-native run-ios 使用不同的 XCode 安装吗?
- office-js - 是否计划在不久的将来修复 Office 插件的“运行时”Edge/IE 警告?
- google-sheets - 当同一个人选择学生多天时,该公式将拉取学生被选择的工作日
- ruby - 如何在 Ruby 中安排每 2 分钟运行一次的作业
- python - 使用 datetime 列对 pandas 数据框进行分箱
- c++ - 如何使用 Catch2 和 CMake 添加单独的测试文件?
- c - 从文本文件 c 中读取矩阵
- python-3.x - 将变压器模型应用于熊猫列中的每一行
- python - Kivy Python Scrollview 事件在多次实例化的类中失败