zoukankan      html  css  js  c++  java
  • 建立Socket Policy服务器

    建立Socket Policy服务器

    (金庆的专栏)

    Flash和Unity3D游戏服务器需要开启一个Socket Policy服务器。
    详细说明见:Setting up a socket policy file server
    http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

    协议如下:
    Flash或U3D播放器向Socket Policy服务器发送请求:
    “<policy-file-request/>\0”,
    服务器返回一个xml文本,其中有包含<cross-domain-policy>配置。

    Adobe提供了Perl和Python代码。Unity3D提供了CSharp代码。
    cs代码用于Windows. Linux上准备使用Python代码。
    在以上网页下载:flashpolicyd_v0.6.zip。
    其中有3个版本:init服务,xinetd服务,独立应用。只需一种即可。

    按应用的性质,请求量极小,所以最适合应用xinetd.
    只需运行其中的install.sh就会安装。
    还需手工在/ect/services中添加服务名flashpolicy和端口843.

    运行以下指令可以测试一下,输出应该是配置文件的内容。
    python -c 'print "<policy-file-request/>%c" % 0' | nc 127.0.0.1 843

    其实以上测试指令在尾部多了个'\n', 不是标准的测试。
    在in.flashpolicyd.py中多了个strip()去除这个'\n'.

    实际用U3D测试时,因为没有'\n'结尾,所以in.flashpolicyd.py无法正常工作。
    需要将35行readline()如下更改:
            request = sys.stdin.readline().strip()
    改为
            request = sys.stdin.readline(len('<policy-file-request/>\0')).strip()
    这样就不需要eol就可以读取了。

    查看其他两个版本的代码没有这个错误,但是有另一个错误,
    即有可能只读一半的请求造成判断出错。

    还有一个问题是因为服务是由nobody运行的,环境变量不同,
    将in.flashpolicyd.py头部的
    #!/usr/bin/env python
    明确为
    #!/usr/local/sbin/python
    可避免调用低版本的python而报错。

  • 相关阅读:
    nginx+upsync+consul 构建动态nginx配置系统
    服务容错保护断路器Hystrix之六:缓存功能的使用
    consul之:ACL配置使用
    Consul之:服务健康监测
    Consul实践指导-DNS接口
    Spring 整合Mybatis实例
    ORACLE SEQUENCE 具体解释
    python高速排序
    降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
    MyBatis在Oracle中插入数据并返回主键的问题解决
  • 原文地址:https://www.cnblogs.com/hdjsjlbs/p/3057022.html
Copyright © 2011-2022 走看看