如何从客户端使用json数据进行套接字发送?

时间:2016-05-24 02:53:19

标签: javascript json node.js sockets

在套接字发出时间内使用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);

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

enter image description here

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

1 个答案:

答案 0 :(得分: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 );
    });
});

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

此外,您的客户代码的这一行:

socket.emit( 'messages', { type : nameVal, fruit: msg } );
在插件完成连接之前,

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