簡體   English   中英

如何通過帶有nodejs的套接字從服務器到客戶端進行通信?

[英]How to communicate from server to client via sockets with nodejs?

目前我正在創建一個Javascript應用程序。 我正在使用AppJS

我在理解客戶端和服務器之間的連接時遇到了一些問題。

菜單欄 - >套接字問題

問題是菜單欄和套接字的組合。

套接字連接

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    socket.emit('onMessage', {
        date: new Date(),
        message: 'Welcome!'
    })
}

菜單欄

var menubar = app.createMenu([{
    label:'File',
    submenu:[{
        label:'New',
        action: function() {
            // Simply window.reload() or windows.frame.reload()?    
            // Reload window
        }
    },{
        label:'Change something in view...',
        action: function() {
            // How to speak to client from here?
            // I cannot use socket.emit()
        }
    }, {
        label:'Exit',
        action: function() {
            window.close()
        }
    }]
}])

但是如何在用戶點擊菜單欄項目時告訴客戶端?

異步長函數 - >套接字

使用套接字的另一個問題是異步長加載函數。

套接字連接

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    var test = veryLongLoading()
    console.log(test) // undefined -.-'
    socket.emit('test', {
        test: test

    })
}

所以我認為我需要使用這樣的回調:

io.sockets.on('connection', onSocketConnection)

function onSocketConnection(socket) {
    veryLongLoading(returnValue)
}

function veryLongLoadingFunction(next) {
    // Blablabla
    next('test')
}

function returnValue(value) {
    // Again socket is not available -.-'
    socket.emit('test', {
        test: test
    })
}

任何人都面臨同樣的問題或任何可以指引我正確方向的人。

也許我只是誤解了流程(我在PHP中正常編程)

問題1

對於第一部分,您需要偵聽來自服務器的事件:

socket.on('message-from-server', function(data) {
  // You need to trigger the sub-menu change here.
  // Which means you need a handle for the sub-menu object.
  subMenu.action(data)
});

問題2

長時間運行異步函數的模式如下所示:

var veryLongLoading = function(next) {
   // pass your value to next
   // like this
   next(someValue);
};

然后使用它,你會這樣做:

veryLongLoading(function(someValue) {
   socket.emit(someValue);
});

希望有所幫助!

暫無
暫無

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

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