PHP封装常用Javascript为JS类以便快速调用

<?
# $Id: ..php,v 0.1 p $

// 禁止直接访问该页面
if (basename($HTTP__VARS['PHP_SELF']) == "js.class.php") {
     header("HTTP/1.0 404 Not Found");
}

# Purpose 封装了一些常用的Javascript代码,以便在PHP中快速调用

class JS{
     function JS(){}

     #返回上页
     # @param $step 返回的层数 默认为1
     function Back($step = -1){
         $msg = "history.go(".$step.");";
         JS::_Write($msg);
         JS::FreeResource();
         exit;
     }

    # 弹出警告的窗口
    # @param $msg 警告信息
     function Alert($msg){
         $msg = "alert(\"".$msg."\");";
         JS::_Write($msg);
     }

    # 写js
    # @param $msg
     function _Write($msg) {
         echo "<script language=\"javascript\">\n";
         echo $msg;
         echo "\n</SCRIPT>";
     }

     # 刷新当前页
     function Reload(){
         $msg = "location.reload();";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #刷新弹出父页
     function ReloadOpener(){
         $msg = "if (opener)     opener.location.reload();";
         JS::_Write($msg);
     }

     #跳转到url
     #@param $ 目标页
     function Goto($url){
         $msg = "location.href = ‘$url’;";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #关闭窗口
     function Close(){
         $msg = "window.close()";
         JS::FreeResource();
         JS::_Write($msg);
         exit;
     }

     #
     #@param $frm 表单名
     function Submit($frm){
         $msg = $frm.".submit();";
         JS::_Write($msg);
     }

    #关闭数据库连接
    function FreeResource(){
         // 数据库连接标志
         global $conn;
         if (is_resource($conn))
             @_close($conn);
     }
}
?>

标签Tags:, , , , , , , , , , , , , , , , , , , ,

mysql优化及全文搜索

my.cnf文件常见优化模块
[mysqld]
port = 3306
-id = 1
socket = /tmp/mysql.sock

# 避免MySQL的外部锁定,减少出错几率增强稳定性。
skip-locking

# 禁止MySQL对外部连接进行DNS解析
skip-name-resolve

# 指定MySQL可能的连接数量
back_log = 256
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

多进程的游戏服务器设计

目前,我们的游戏服务器组是按多进程的方式设计的。强调多进程,是想提另外一点,我们每个进程上是单线程的。所以,我们在设计中,系统的复杂点在于进程间如何交换数据;而不需要考虑线程间的数据锁问题。

如果肆意的做进程间通讯,在进程数量不断增加后,会使系统混乱不可控。经过分析后,我决定做如下的限制:

如果一个进程需要和多个服务器做双向通讯,那么这个进程不能处理复杂的逻辑,而只是过滤和转发数据用。即,这样的一个进程 S ,只会把进程 A 发过来的数据转发到 B ;或把进程 B 发过来的数据转发到 A 。或者从一端发过来的数据,经过简单的协议分析后,可以分发到不同的地方。例如,把客户端发过来的数据包中的聊天信息分离处理,交到聊天进程处理。

有逻辑处理的进程上的数据流一定是单向的,它可以从多个数据源读取数据,但是处理后一定反馈到另外的地方,而不需要和数据源做逻辑上的交互。

每个进程尽可能的保持单个输入点,或是单个输出点。

所有费时的操作均发到独立的进程,以队列方式处理。

按功能和场景划分进程,单一服务和单一场景中不再分离出多个进程做负载均衡。 (更多…)

标签Tags:, , , , , , , , , , ,

多服务器的用户身份认证方案

当游戏服务器群达到一定规模后,让用户只从一个入口连入会给这个入口带来很大的压力。这样,我们就需要让服务器群中的多台机器都允许用户直接连接。

当服务器开放给用户直接登陆后,必须面临的一个问题就是用户身份认证的问题。

大多数提供网络服务的公司都做了一套统一的用户认证系统,比如微软的 passport ,网易的通行证,等等。为了避免重复验证用户身份而给用户认证系统带来过大的负担,云风在这里给出一个参考解决方案。 (更多…)

标签Tags:, , , , , , , , , ,

PHP连接各种数据库的方法

相信大家对PHP已经很熟悉了。PHP内置了几乎对世界上所有的数据库的支持,而不再需要重新扩充。所以有人说:不会用PHP调用数据库,等于没学PHP。下面是笔者根据本人的操作经验和大侠们的意见而得出的总结,希望能给初学者提供一些益处。

PHP调用三种数据库的方法

本文比较详细的介绍PHP调用MySQL、ODBC以及ORACLE数据库。 (更多…)

标签Tags:, , , ,

自定义数据库自动编号初始值和步进值

  自定义数据库自动编号初始值和步进值问题: 如何定义数据库的自动编号字段的初始值和步进值?如何定义自动增加字段的初始值和步进值?如何使删除过数据的自动增加字段的开始值重新从1开始?

  回答: 通过以下语句,你可以在建表的时候指定其起始值和步进值:CREATE TABLE tblNewOrder2 ( OrderId AUTOINCREMENT (1000, 10), ItemId LONG, Quantity LONG)

  你也可以用下面的语句修改下一个起始值和步进值:ALTER TABLE tblOrder ALTER COLUMN OrderId COUNTER (2000, 50)

  要重新开始:ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1) 在 VBE 界面里面用以下代码:docmd.runsql "ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)"

  这里要注意的是自动编号往往被用作标识记录的唯一性,但是 Jet 在用 DDL 语句更改自动编号的同时不会保证修改后的自动编号仍然保持唯一性,因此会出现标识号重复的现象。要避免这一现象最好把自动编号设定为主键、或者不可重复。

标签Tags:, , , , ,