Node.js中客户端emit无法触发服务器Socket函数的问题求助
解决Socket.IO客户端emit事件服务器无响应的问题
我帮你仔细梳理了代码和问题细节,发现几个关键问题,应该能解决你的困扰:
1. Socket连接URL错误
你当前的客户端连接代码是:
var socket = io.connect('http://localhost:1111/SystemAlpha.html');
Socket.IO的客户端连接应该指向服务器的根端点,而不是具体的HTML文件路径。Socket.IO的连接是和服务器上的Socket服务建立的,和页面文件无关。正确的连接写法应该是:
var socket = io.connect('http://localhost:1111'); // 如果你的页面是从http://localhost:1111/SystemAlpha.html加载的,甚至可以简化成: // var socket = io.connect('/');
2. Script标签写法错误
你把外部脚本引入和自定义代码写在了同一个script标签里:
<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'); // ... 其他代码 </script>
当script标签带有src属性时,浏览器会忽略标签内部的所有代码,只加载外部脚本。你需要把它们分成两个独立的script标签:
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.js"></script> <script> // 这里写你的自定义代码 var socket = io.connect('http://localhost:1111'); // ... </script>
3. 事件发送时机过早
你现在直接在script里调用SendData("NewPlayer"),但Socket.IO的连接是异步建立的,这时候连接可能还没完成,事件就发送出去了,服务器自然接收不到。你需要等待socket的connect事件触发后再发送数据:
var socket = io.connect('http://localhost:1111'); // 等待连接成功后再发送事件 socket.on('connect', function() { console.log('客户端已连接到服务器'); 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] } ); } }
验证服务器代码
你的服务器代码看起来是没问题的,只要客户端连接正确、事件发送时机合适,服务器的NewPlayer事件监听器应该能正常触发,打印Recieved。
按照上面的修改调整后,应该就能解决服务器收不到客户端事件的问题了。
内容的提问来源于stack exchange,提问作者user12345248
相关产品推荐
相关产品推荐

