目前我正在创建一款JavaScript应用程序,我使用AppJS进行开发。
我在理解客户端和服务器之间的连接方面遇到了一些问题。
菜单栏 -> socket问题
问题出现在菜单栏和socket组合上。
Socket连接
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()
}
}]
}])
但如何告知客户端用户何时单击了菜单栏项目?
异步长函数 -> sockets
使用sockets的另一个问题是异步长时间加载函数。
套接字连接
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编程)。
socket.emit()
在veryLongLoading()
中不可用。感谢你的帮助! - Ron van der Heijden