use EventSource instead of polling