我对整个套接字和服务器开发都很陌生,我还不熟悉它是如何工作的。
我制作了一个需要与套接字通信的简单Flash应用程序, 有了这个,我使用了一个支持AS3的套接字并使用“Red Tamarin”,
好吧,我会明白:
我目前有一个总是运行socket.receive()的循环 它会响应甚至显示我从Flash应用程序发送的文本。
我的目标是获得一个简单的在线Flash游戏, 可能使用SQL / SQLite来保存信息并将其导出给玩家,
我不明白的是我怎么能把它带到那里..
我认为我需要做的是这样的事情:
在服务器端:
客户方:
我的计划真的应该如何吗? 关于发送的实际信息,我很好奇,不断发送服务器字符串数据会有效吗? (这就是我习惯使用的,而不是一些奇怪的字节和东西)
提前致谢!
答案 0 :(得分:2)
你走在正确的轨道上。但我鼓励您首先定义一个通信协议。您可以从定义命令的外观开始。例如:
COMMAND <space> PARAM1 <space> PARAM2 <line-break>
关于协议定义的一些注意事项:
PARAM1
是一个字符串并包含空格怎么办?如何判断每个参数的开始和结束?这些是我可以为您的方案考虑的最基本的考虑因素。可能还有其他重要的考虑因素,但大多数都取决于游戏的运作方式。如果您认为我忘记了OP应该考虑的事情,请随时修改我的列表。
在定义命令的外观之后,记录您认为应用程序需要的所有命令。除非某些操作过于复杂或过长,否则请勿隔离命令的定义。尽量保持简单。
现在回到你的问题:
我的计划真的应该如何吗?
是。这正是应该的样子。
关于发送的实际信息,我很好奇,不断发送服务器字符串数据会有效吗? (这就是我习惯使用的,而不是一些奇怪的字节和东西)
这取决于许多因素:
TCP vs UDP http://www.it20.info/misc/pictures/TCP-clouds-UDP-clouds-design-for-fail-and-AWS1.jpg
答案 1 :(得分:0)
在那里,您将看到使用redtamarin
构建套接字服务器的基本知识特别看 https://code.google.com/p/spitfire-and-firedrop/source/browse/trunk/spitfire/src/spitfire/Server.as
详细信息如下,redtamarin基本上使用带有select()的阻塞套接字 最大硬编码FD_SETSIZE为4096 看到: https://code.google.com/p/redtamarin/wiki/Socket#maxConcurrentConnection
所以这就是你的服务器循环中发生的事情
你基本上有一个套接字对象数组
每隔x毫秒和每个套接字循环 你问你是否可以阅读
如果你可以读取套接字,那么你比较这个套接字obj是否是服务器 如果它是服务器意味着你有一个新的连接 如果不是这意味着客户端尝试向您发送数据,那么您就读取了这些数据 然后将其传递给“口译员”
稍后在同一个循环中检查套接字obj是否仍然有效 如果你能写信给它 如果你可以写,套接字对象不是服务器 然后你可以将数据发送到客户端
这里是C中的等效代码供参考 http://martinbroadhurst.com/source/select-server.c.html http://www.lowtek.com/sockets/select.html
查看socketpolicyd的一个非常基本的例子
https://code.google.com/p/spitfire-and-firedrop/wiki/socketpolicyd https://code.google.com/p/spitfire-and-firedrop/source/browse/trunk/socketpolicyd/src/spitfire/SocketPolicyServer.as
并将实现与Perl和PHP进行比较 http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html