我正在开发一个Ballerina WebSocket服务,目标是接收消息并将其广播到所有连接的WebSocket客户端。为了实现这一点,我希望对服务的“onMessage”功能进行一些修改。具体来说,我需要传递“connections”Map,它保存每个WebSocket客户端的connectionID。然而,我面临着一个问题,我不能访问这些连接,由于功能被隔离。
我想知道是否有一种解决方案可以让我访问这些连接,或者是否有其他方法可以满足我的要求?这是我试过的代码
这是我的代码
map<websocket:Caller> connections = {};
service class ASB {
*websocket:Service;
remote function onOpen(websocket:Caller caller) returns error? {
connections[caller.getConnectionId()] = caller;
}
isolated remote function onMessage(string message) returns error? {
check broadcast(message, connections);
}
}
isolated function broadcast(string text, map<websocket:Caller> connections) returns error? {
foreach websocket:Caller caller in connections {
if caller is websocket:Caller {
check caller->writeTextMessage(text);
}
}
}
1条答案
按热度按时间lymgl2op1#
解决方案是将模块级别的
connections
Map设置为孤立的。然后可以在广播消息中直接使用lock
访问connections变量,如下所示。有关更多详细信息,请参见isolated-variables