簡體   English   中英

如何使用json數據從客戶端發出套接字?

[英]How to use a json data for socket emit from client side?

在套接字發出時間期間使用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);

完成所有這些操作后,我剛剛啟動了節點服務器,並在頁面加載時在套接字上“連接”,但我在套接字端的工作根本不起作用。我在服務器端的套接字部分的結果(問題)顯示這個錯誤如下圖:-

在此處輸入圖片說明

可能是什么問題,我該如何解決?

這段代碼是錯誤的:

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事件要安全得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM