class ArticleListChannel implements WebSocketChannel {

    /**
     * Session articles &lt;session, "articleId1,articleId2"&gt;.
     */
    public static final Map<WebSocketSession, String> SESSIONS = new ConcurrentHashMap<>();

    /**
     * Notifies the specified article heat message to browsers.
     *
     * @param message the specified message, for example
     *                {
     *                "articleId": "",
     *                "operation": "" // "+"/"-"
     *                }
     */
    public static void notifyHeat(final JSONObject message) {<FILL_FUNCTION_BODY>}

    /**
     * Called when the socket connection with the browser is established.
     *
     * @param session session
     */
    @Override
    public void onConnect(final WebSocketSession session) {
        final String articleIds = session.getParameter(Article.ARTICLE_T_IDS);
        if (StringUtils.isBlank(articleIds)) {
            return;
        }

        SESSIONS.put(session, articleIds);
    }

    /**
     * Called when the connection closed.
     *
     * @param session session
     */
    @Override
    public void onClose(final WebSocketSession session) {
        SESSIONS.remove(session);
    }

    /**
     * Called when a message received from the browser.
     *
     * @param message message
     */
    @Override
    public void onMessage(final Message message) {
    }

    /**
     * Called when a error received.
     *
     * @param error error
     */
    @Override
    public void onError(final Error error) {
        SESSIONS.remove(error.session);
    }
}

        final String articleId = message.optString(Article.ARTICLE_T_ID);
        final String msgStr = message.toString();

        for (final Map.Entry<WebSocketSession, String> entry : SESSIONS.entrySet()) {
            final WebSocketSession session = entry.getKey();
            final String articleIds = entry.getValue();
            if (!StringUtils.contains(articleIds, articleId)) {
                continue;
            }

            session.sendText(msgStr);
        }
    
<no_super_class>