gpt4 book ai didi

javascript - 如何使用 nodejs 通过套接字从服务器到客户端进行通信?

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:52 24 4
gpt4 key购买 nike

目前我正在创建一个 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 编程)

最佳答案

问题一

对于第一部分,您需要监听来自服务器的事件:

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);
});

希望对您有所帮助!

关于javascript - 如何使用 nodejs 通过套接字从服务器到客户端进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com