簡體   English   中英

Node.js跨端口發送數據包

[英]Node.js Emit Packet across Ports

我有一對server.js和client.js腳本文件。

這是server.js文件...

var express = require('express');
var appMain = express(); var appReset = express();
var serverMain = require('http').Server(appMain);
var serverReset = require('http').Server(appReset);
var fs = require('fs');

appMain.get('/', function(req, res) {
    res.sendFile(__dirname + '/client/index.html');
});
appMain.use('/client', express.static(__dirname + '/client'));

appReset.get('/', function(req, res) {
    res.sendFile(__dirname + '/client/reset.html');
});
appReset.use('/client', express.static(__dirname + '/client'));

serverMain.listen(3000); console.log('Start mainServer');
serverReset.listen(2000); console.log('Start resetServer');

var gameScores;

fs.readFile('client/data/scores.txt', 'utf8', function(error, data) {
    if (error) {
        console.log('Read Error!');
        gameScores = null;
    }
    else {
        console.log('Read Success!');
        gameScores = data;
    }
});

var ioMain = require('socket.io') (serverMain,{});
ioMain.sockets.on('connection', function(socket) {
    console.log('mainSocket Connected');
    socket.emit('gameScores', gameScores);
    socket.on('gameScores', function(data) {
        gameScores = data;
        fs.writeFile('client/data/scores.txt', JSON.stringify(data), function(error) {
            if (error)
                console.log('Write Error!');
            else
                console.log('Write Success!');
        });
        socket.emit('gameScores', gameScores);
    });
});

var ioReset = require('socket.io') (serverReset,{});
ioReset.sockets.on('connection', function(socket) {
    console.log('resetSocket Connected');
    socket.on('resetScores', function(data) {
        fs.unlink('client/data/scores.txt', function(error) {
            if (error) {
                console.log('Delete Error!');
                socket.emit('clearScores', false);
            }
            else {
                console.log('Delete Success!');
                gameScores = null;
                socket.emit('defaultScores', gameScores);
                socket.emit('clearScores', true);
            }
        });
    });
});

這是client.js文件...

socket.on('gameScores', function(data) {
    if (data !== null) {
        if (JSON.parse(localStorage.reload))
            localStorage.reload = false;
        else
            localStorage.gameScores = JSON.stringify(data);
        localStorage.emptyScores = false;
    }
    else {
        localStorage.emptyScores = true;
        localStorage.reload = false;
    }
});
socket.on('defaultScores', function(data) {
    if (data == null) {
        console.log('Received Default from Server');
        localStorage.emptyScores = true;
        Game.main.gameScores('load');
    }
});

除了在server.js文件中看到注釋“ Delete Success!”之外,這兩個文件的所有代碼均正常工作。 然后是三行代碼。 在這三行中,不起作用的特定行如下:

socket.emit('defaultScores', gameScores);

上面的代碼行應將數據包發送到標簽為“ defaultScores”的client.js文件中的相應套接字接收器,但客戶端永遠不會收到它。 我知道客戶端不會收到它,因為注釋“從服務器收到默認值”不會打印到客戶端控制台。 一旦有問題的套接字接收器能夠成功工作,從而打印出有問題的注釋,其余的就可以正常工作。

因此,我特別要求獲得幫助以使注釋“從服務器接收默認值”成功打印到客戶端控制台。

我設法自己解決了。 值得慶幸的是,我遇到了以下先前的帖子...

nodejs套接字從一個端口接收數據並在另一個端口上可用

從本文中,我可以從“刪除成功!”之后的第二行代碼中推斷出我需要的更改。 評論,是要更改為...

ioMain.emit('defaultScores', gameScores);

這樣就成功解決了問題。

暫無
暫無

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

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