If the same process is managing the screen and listening on the socket, you'll have some random amount of latency. There's no way around that. There will be times when your socket goes ready that Tk is busy thinking about the screen.
If you need to isolate the latency, put your communication protocol in a second process, and when it has an entire update for the Tk process, it can tap the Tk process on the shoulder and say "here's your new data". I'd do that with two cooperating POE processes (one POE-Tk, one just POE), or maybe an Event.pm loop for the latter.