Server(server)

服务端系统功能。 全部展开

服务端系统展开

  • + io.dir(dirname,hidden,times)

    sizes, times = io.dir(dirname,hidden,times), 返回一个目录中所有文件的尺寸和修改时间。

    • 参数
    • hidden : 非nil非false则包括隐藏文件,既 . 开头的文件。
    • times : 为nil或false则不返回修改时间,否则返回2000年1月1日起始的秒数。
    • 返回
    • 返回的表以文件名为key,没有特定顺序。
    • 返回的sizes,value为数字,>= 0为常规文件尺寸,-1为其它文件类型,-2则为目录。
  • + io.readall(filename)

    data, err = io.readall(filename), 读取整个文件内容,返回字节串。
    如果读取失败,返回nil和错误信息。

  • + io.stat(filename)

    size, time = io.stat(filename), 返回文件的尺寸和修改时间。
    时间是从2000年1月1日起始的秒数,精度依赖于系统。

  • + os.color(foreground color: number, background color: number)

    win32上设置窗口的前景和背景颜色。

  • + os.exit

    参见lua文档。

  • + os.id(id)

    process, group, session, parent = os.id(id), 返回一个id对应的进程、进程组、会话、父进程id。

    • 参数
    • id : 省略或者为0,表示当前进程。
    • 返回
    • id对应进程不存在,无返回值。
    • Windows版只返回 process 和 parent。
    • Linux和Mac版只有当前进程才有 parent 返回值。
  • + os.info

    一个包含服务端系统环境信息和启动参数的table。
    系统环境信息如 HOME=/home/fancy,启动参数如 database=localhost,=前的字符串作为table的key,=后的字符串作为value。
    启动参数也可以不使用=号,如test,按照顺序编号,编号作为table的key,参数作为value,同时参数也作为key,编号作为value。
    os.info.system == 'linux' 或 'mac' 或 'windows'。
    os.info.version为当前server的版本号。

  • + os.kill(processId)

    中止os.launch启动的进程。

  • + os.launch(directory, argument1, ...)

    processId = os.launch(directory, argument1, ...), 从directory目录中启动另一个服务端。
    argument1等不宜含有空格,否则参数传递可能出现错误。
    不等待新进程中止,返回新进程的id。

  • + os.remove

    参见lua文档。

  • + os.rename

    参见lua文档。

  • + os.title(title)

    win32上设置窗口的标题栏文字。

  • + sheets = _excel(filename)

    读xls文件。

    • 返回
    • 以sheet名为key,sheet内容为value的table。
    • sheet内容也是table,rown为行数,coln为列数。
    • sheet[1-rown][1-coln]为每个单元格内容,可能为nil、字符串、数字。

系统配置展开

  • +

    因为net:send使用系统自身的缓冲区控制,建议调大系统配置。
    Win XP和7 修改注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\DefaultSendWindow
    建议设置为 DWORD 49152
    Win 7 还可以修改注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters\DynamicSendBufferDisable
    设置为 DWORD 1
    Linux 修改sysctl.conf 建议命令:
    echo '
    net.core.rmem_max = 524288
    net.ipv4.tcp_rmem = 16384 32768 262144
    net.core.wmem_max = 1048576
    net.ipv4.tcp_wmem = 16384 49152 262144
    net.core.somaxconn = 12000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2
    net.ipv4.tcp_fin_timeout = 6
    net.ipv4.ip_local_port_range = 10000 65000
    net.unix.max_dgram_qlen = 1000
    ' >> /etc/sysctl.conf; sysctl -p

Linux部署说明展开

  • +

    最低系统:
    Linux内核 >= 2.6.18 32位
    2G内存 Postgresql >= 9.1 32位

    建议系统:
    Linux内核 >= 2.6.18 64位(如 CentOS >= 5.6 64位 或 UbuntuServer >= 10.04 64位)
    安装32位libc和libnss >= 8G内存
    Postgresql >= 9.2 64位
    ulimit -n 打开文件数量限制 >= 20000 建议命令: echo '
    * soft nofile 30000
    * hard nofile 30000
    ' >> /etc/security/limits.conf
    可能需要重启生效

    服务端部署:
    fancy-server上传到/home/
    chown root:root /home/fancy-server
    chmod go-r /home/fancy-server
    chmod +sx /home/fancy-server

    应用部署:
    先确定应用代号,作为主机用户,例如 demo
    useradd -d /home/demo demo
    将应用文件全部复制到 /home/demo中
    chown demo:demo -R /home/demo
    chmod o-rwx -R /home/demo
    进入launch.lua所在目录,如 /home/demo/code
    cd /home/demo/code
    /home/fancy-server
    服务端首先chroot到/home/demo目录,然后从当前目录加载launch.lua开始运行。
    注意在脚本中 根目录 / 对应主机目录 /home/demo,如脚本访问 /code/test 文件就是访问主机的 /home/demo/code/test 文件,因此当前目录就是 /code/ 也就是主机的 /home/demo/code/。

问题反馈(登录才可以发表哦!)