套接字确实是合适的。但是您最好使用客户端/服务器方法而不是 P2P 方法。
在一个非常知名的即时消息服务上工作了很多年,我可以绝对告诉你,通过服务器并不慢——只要你的服务器不慢。
客户端/服务器有很多优点。也就是说,它不像任何类型的 P2P 连接那样困难,因为 NAT 和防火墙等问题使直接套接字连接变得困难和不可靠。此外,无论如何,您都需要一个消息服务来让客户端交换 IP 地址。
您所说的客户端或服务器必须“轮询”的假设不是可扩展系统的工作方式。您应该使用持久的 TCP 套接字,并考虑通过目前存在的任何可用异步方法来扩展套接字服务。Linux 上的 select()、poll()、epoll 和 Windows 上的 IO Completion Ports 都是无需定期轮询即可同时连接数千个套接字的技术。
我的建议 - 只需部署 XMPP/Jabber 服务器。大多数实现都可以很好地扩展到数千个客户端。那么你的聊天程序只是一个 XMPP 客户端套接字。对于用户只能通过 http 或 http 代理服务器进行访问的情况,一些 Jabber 服务器甚至支持 HTTP 连接。前段时间我玩过Openfire,印象深刻。
我相当肯定 iOS 有套接字,而且它是苹果允许的。我只从从事 iOS 产品工作的人那里得到二手信息。您可能不应该将推送通知服务用于通知来唤醒您的应用程序需要做的事情之外的任何事情。
希望这可以帮助。