从Play 2.4.1迁移到2.5.6 -套接字



我已经更新了我的Play框架版本从2.4.12.5.6,但现在我有一个问题与web套接字管理。

我有一个控制器类,其中方法liveUpdate()返回WebSocket<String>实例。
在这种方法中,我使用WebSocket.whenReady()HashMap<Out<String>, String>中使用Out<String>,其中密钥是客户端输出流,值是包含语言信息的String,因为当我需要发送广播消息时,我迭代HashMap

现在所有这些在2.5.6中被删除或弃用!
搜索web,我发现新的实现是基于Akka Streams使用Flow类,但我不知道如何适应我的代码。

    WebSocket.whenReady()WebSocket.Text.accept() 取代
  • Out<?>被akka流替换为Flow

这是我的代码:

Alarms.java

public class Alarms extends Controller {
    @Inject
    private ActiveAlarms activeAlarms;
    [...]
    public WebSocket liveUpdate() {
        return WebSocket.whenReady((in, out) -> {
            in.onMessage(language ->{
                activeAlarms.register(out, language);
            });
            in.onClose(() -> activeAlarms.unregister(out));
        });
    }
    [...]
}

ActiveAlarms.java

public class ActiveAlarms{
    private HashMap<Out<String>, String> websockets = new HashMap<>();
    [...]
    public void register(Out<String> out, String language) {
        websockets.put(out, language);
        updateWebsockets(out, language);
    }
    public void unregister(Out<String> out) {
        websockets.remove(out);
    }
    private void updateWebsockets(Out<String> s, String lang){
        if(s == null) return;
        List<AlarmEvent> alarmsList = AlarmEvent.findActive();
        ArrayList<AlarmEvent> translatedAlarmsList = new ArrayList<>();
        //translate
        alarmsList.forEach(e ->{
            if(e != null) {
                e.setAlarm(e.getAlarm().translate(checkLanguage(lang)));
                translatedAlarmsList.add(e);
            }
        });

        //WRITE TO SOCKET
        String alarms = Json.stringify(Json.toJson(translatedAlarmsList));
        try {
            s.write(alarms);
        } catch (Exception e2) {
            Logger.debug("EX ActiveAlarms --> updateWebSocket  " + e2.getMessage());
        }
    }
    private void updateWebsockets(){
        websockets.forEach(this::updateWebsockets);
    }
    [...]
}

关于如何将我的代码转换为WebSocket的新实现的任何想法?

我认为您可以轻松地从一个迁移到另一个。你看过这份文件了吗?

如果你想用Akka流管理Socket,这是相应的文档部分。

如果你还需要帮助迁移,请告诉我,我会帮助你的。

相关内容

  • 没有找到相关文章

最新更新