2

次の node.js のコードでは、角かっこ内のすべての受信データをログに記録するのではなく、データをチャンクに分割します。たとえば、受信データが ABCDEF...XYZ の場合、データは [ABCDEF...XYZ] ではなく [ABC][DEF]...[XYZ] としてログに記録されます。もちろん、データははるかに大きく、アルファベットは単なる例です。

すべての着信データが部分的にではなく括弧内に一度記録されるようにするには、これをどのように記述すればよいですか?

chatServer.on('connection', function(client) 
{
    client.on('data', function(data) 
    {
        console.log('[' + data.toString() + ']');
    })    
})
4

2 に答える 2

8

データはパケットで到着するので、(この場合) 関数の外で定義した変数にパケットを連結する必要があります。

buffer = '';

chatServer.on('connection', function(client) 
{
    client.on('data', function(data) 
    {
        buffer += data.toString();
    })    
});

console.log('[' + buffer + ']');
于 2012-06-28T01:47:39.533 に答える
4

matthewdavidson が言ったように、メッセージ全体ではなく、送信されるデータのすべての「チャンク」にサブスクライブしています。関数内のクロージャーでデータをキャプチャし、非同期で応答する可能性が高くなります。次のことを試してください。

chatServer.on('connection', function(client) 
{
    var buffer = '';

    client.on('data', function(data) 
    {
        buffer += data;
    })

    client.on('end', function(){
        console.log('[' + buffer + ']');
    })
});

詳細については、http: //www.nodebeginner.org/#handling-post-requestsをご覧ください。

于 2012-06-28T01:57:59.777 に答える