最近我开始开发简单的flash(flash仅限于tcp)实时多人游戏,我需要一台服务器来提供客户端之间的通信。为此我决定使用Delphi XE + Indy,但我发现Indy提供了同步通信模型。 (我从未使用任何Indy组件。)
到目前为止我所理解的是同步(阻塞)模型限制了并发性,因此使得Indy TCP服务器组件不适合实时多人游戏。
我的问题是:我应该使用非阻塞通信以及实现它的最佳工具(组件,类等)是什么?
如果您向我提供使用此工具广播消息的示例(源代码),我将非常高兴。 - 我想立即向特定“房间”的每个成员发送相同的消息(但不要将消息发送给其他房间的成员。)
PS 抱歉我的英语很差(我不会说它本地):))
提前致谢。任何帮助表示赞赏。
答案 0 :(得分:4)
你误解了Indy是如何运作的。是的,它确实使用阻塞套接字,但这并不意味着它不能异步使用。 TIdTCPServer
组件是多线程的。它并行处理多个客户端连接。当然可以将消息从一个客户端发送到另一个客户端,并将消息广播到多个客户端。我之前在StackOverflow,Embarcadero forums和Indy forum上多次发布了这样的示例。下次,请在提问之前做一点研究。
答案 1 :(得分:1)
0MQ应该适合您的需要。 0MQ实现PGM多播并允许请求 - 回复,发布 - 订阅,管道和排除对core patterns。不幸的是它没有当前的pascal / delphi绑定。您可以在0MQ guide
中找到许多(非pascal)示例