[英]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.