【问题标题】:How to use a json data for socket emit from client side?如何使用 json 数据从客户端发出套接字?
【发布时间】:2016-09-21 01:54:15
【问题描述】:

在套接字发射期间使用 mysql 获取数据的最佳方法是什么? 例如,我将从数据库中检索到一个数据,现在我想在 socket.emit('emit_name', function(data){ }) 上使用该数据。最好的方法是什么?

我首先用简单的方法测试它是否有效,而不是从 json 开始研究复杂的方法。我在“客户端”上使用了两个数据作为“类型”和“水果”这样的东西

var socket = io.connect( 'http://localhost:8080' );
var nameVal = "Type";
var msg = "apple";

socket.emit( 'messages', { type : nameVal, fruit: msg } );

在服务器端

var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var app = express();
var mysql = require('mysql');
var server = http.createServer( app );
var io = socket.listen( server );
var pool = mysql.createPool({
connectionLimit : 10,
host: "localhost",
user: "root",
password: "",
database: "mydb"
  }
);


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

console.log( "User connected..!" );

io.client.on( 'messages', function(data) {
console.log( 'Message received ' + data.type + ":" + data.fruit );

  });

});

server.listen(8080);

完成这一切之后,我刚刚启动了我的节点服务器,并在页面加载时在我的套接字上“连接”了,但我在套接字端的工作根本没有按照我的想法工作。套接字部分的结果(问题)服务器端给出这个错误如下图:-

可能是什么问题?我该如何解决这个问题?

【问题讨论】:

    标签: javascript json node.js sockets


    【解决方案1】:

    这段代码是错误的:

    io.sockets.on( 'connection', function() {
    
    console.log( "User connected..!" );
    
    io.client.on( 'messages', function(data) {
    console.log( 'Message received ' + data.type + ":" + data.fruit );
    
      });
    
    });
    

    应该是这样的:

    io.on( 'connection', function(socket) {
    
        console.log( "User connected..!" );
    
        socket.on( 'messages', function(data) {
            console.log( 'Message received ' + data.type + ":" + data.fruit );
        });
    });
    

    您必须使用传递给io.on('connection, ...)` 事件的socket 变量在新连接的套接字上设置事件处理程序。


    另外,这行你的客户端代码:

    socket.emit( 'messages', { type : nameVal, fruit: msg } );
    

    可能在套接字完成连接之前运行得太早。 io.connect() 是异步的。它不会立即完成。如果您尝试在连接之前发送数据,那么还没有一个活动套接字来实际发送数据。 socket.io 可能会缓存该数据,直到套接字连接(您必须检查 socket.io 代码才能确定),但在发送之前等待套接字上的connect 事件要安全得多数据。

    【讨论】:

    • 先生您太棒了!它对我来说很完美!通过您的解决方案,我现在也可以使用 json 类型的数据,这也是我主要计划与套接字混合的 :)
    猜你喜欢
    • 2020-06-01
    • 2019-08-25
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2014-09-09
    • 2015-10-25
    相关资源
    最近更新 更多