node.js - 如何将数据从 socket-IO 客户端发送到 socket-IO 服务器?
问题描述
所以我正在开发一个需要双向通道在客户端和服务器之间传输数据的小型应用程序。
将 sata 从服务器发送到客户端没有问题。工作得很好。但是,反过来是行不通的。由于某种原因,从客户端向客户端发送数据不起作用。
这是client.js
let io = require('socket.io-client');
let socket = io.connect("http://localhost:5000/", {
reconnection: false
});
socket.on('connect', function() {
console.log('Connected to server');
socket.emit('data', 'data is emitted !')
});
这是 server.js :
var io = require('socket.io').listen(process.env.port||5000);
io.on('connection',function () {
console.log('client connected');
io.on('data',function (data) {
console.log(`data received is '${data}'`)
})
});
我错过了什么?
解决方案
服务器代码需要监听来自特定的传入事件socket.on()
,而不是io.on()
。 io
是服务器。它会收到新连接的通知,但不会收到给定连接上的个别消息。您必须侦听特定套接字上的事件才能从客户端接收数据。
因此,更改为这个(更改io
为socket
在一个位置并向处理程序添加socket
参数io.on('connection', function(socket) ());
(请参阅下面添加的两个位置socket
):
const io = require('socket.io').listen(process.env.port||5000);
io.on('connection', function(socket) {
console.log('client connected');
// listen for incoming data msg on this newly connected socket
socket.on('data',function (data) {
console.log(`data received is '${data}'`)
});
});
注意:socket
在两个地方添加。
推荐阅读
- node.js - 在登录时有条件地重定向用户页面(React)
- jquery - 按钮单击未选择所需的 jquery 选项卡
- java - 使用 Spring ApplicationContext 类路径的绝对路径加载资源文件,如(sql、txt 等)
- android - Flutter MaterialPageRoute 导航到黑色背景的屏幕时如何解决?
- java - status statuscode=places_api_access_not_configured resolution=null 问题
- javascript - erb link_to 标记内的 Vue.js 数据
- python - 无法加载或保存 txt。文件
- omnet++ - 使用静脉进行 DoS 攻击
- javascript - 如何使用 JsDoc 为 Blob 定义类型?
- hive - Hive:根据相邻行合并或标记多行