其它笔记

工作中遇到的一些零碎的问题

window server

  • 2008 r2 c盘空间一直满了有一种情况是因为事件日志太多了 事件日志目录 C:\Windows\System32\winevt\Logs
  • window的服务器更新一定要关了,不然半夜可能给你重启了

window 10

  • 因为win10我用WSL了, 然后我git下载下来的c++项目目录名区分大小写了,可那vs2013对目录的大小写有问题导致一直找不到文件好坑啊
  • vs2017兼容也有问题智能提示没了,至少项目还能编译先将就着用吧
  • fsutil file SetCaseSensitiveInfo c:\sysgeek enable 设置目录大小写敏感 disable禁用
  • fsutil file queryCaseSensitiveInfo c:\sysgeek 查询目录大小写敏感

soeasy速易

  • 里面有两个secretkey 服务器验证用的是游戏上的secret_key 不是渠道里面的 secretkey

window批处理程序

  • 简单删除日志的批处理删除10天前的日志
1
2
3
4
5
6
7
8
9
10
11
@echo off
SET /a fn = %DATE:~8,2% - 10
if %fn% LSS 1 SET /a fn = 31 + %fn%

if %fn% LSS 10 (
del websocket_0%fn%*
del rooter_0%fn%*
)else (
del websocket_%fn%*
del rooter_%fn%*
)
  • Windows10远程报错:由于CredSSP加密Oracle修正
1
2
3
4
5
win10 home版本
注册表修改
HKLM(缩写)\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters
添加 新建 DWORD(32) AllowEncryptionOracle 值 2
在我的win10电脑上不需要重启就能用了
  • win10 linux子系统报错 Error: 0x800703fa - Press any key to continue 这个重启一下服务 LxssManager

项目日志

合服处理

  • 改变role表中的serverkey字段变成需要的服
  • 暂时没有找到清理缓存数据的只能重新加载 自动清理数据需要24小时不在线才清理时间太长了

新加服务器

  • 数据库密码最好不要有特殊字符# redis密码也不要有#
  • 渠道要先后台修改一下才能更新到redis这个登录才能取到
  • 启动游戏服务器
    • 修改server-config.xml 修改成对应数据库 账号 密码
    • 游戏的config数据库也要修改配置
    • 游戏config数据库中的backend_port这个后台端口,用于支付通知和后台发邮件的
    • 后台发邮件读取端口是通过idplatdatabase.gameserverlist表字段servergmport跟上面配置要对应起来
  • 配置nginx转发websocket
  • 启动登录服务器
    • 修改server-config.xml 修改成对应数据库 账号 密码 (现在log数据库直接放在了login库下面了可以单独建个库)
    • 配置中的login-data verifyUrl必须改成后台的域名 不然非100渠道不能登录
    • 开放一共端口8079用来https访问转发登录服务器上的8080端口 切换最后登录的游戏房间
  • php安装插件后必须重启php服务 在nginx要注释默认 必须使用下面的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
location ~ \.php(.*)$ {
add_header 'Access-Control-Allow-Origin' '*';
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
fastcgi_pass unix:/tmp/php-cgi-72.sock;
fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
}
  • cdkey导出需要用到jszip的
    • \public\static\admin\xlsx 这个目录的node_modules 下的jszip链接在window上放过了一下有问题
    • 隐藏文件看不到可以使用 ls -la 显示所有文件
    • 建立链接 ln -s 源文件 目标文件
  • 有个8097端口通知登录服务器最后登录的服务器的,要在nginx添加转发,这8079不是配置的是服务器的登录服务器上配置了8080客户端程序减了1后得到的

QP

  • 添加游戏类型时添加表 GameGameItem GameKindItem 中数据 数据库是 RYPlatformDB 如果后一个不加房间能加载但启动一直显示初始化就卡着了

MYQP

  • 复制数据库 创建gUser账号 先导入bak文件 创建GameDB.sql QPGameUserDB.sql QPTreasureDB.sql
    • 数据库文件
    • GoodID.csv 靓号gameid
    • UserIDGameID.csv userid对应的gameid
    • nickname.sql 机器人昵称数据
    • android.sql 创建机器人数据
    • 创建机器人修改分数作业 半小时执行一次
  • 服务websocket 修改websocket.conf中router地址
  • ScriptServer 修改数据库配置,redis配置 短信配置 微信配置
  • DBServer 修改数据库配置,redis配置
  • 复制游戏 修改游戏 ServerStr.ini
  • 启动游戏要设置数据库的账号密码 设置后的密码再注册表中 HKEY_CURRENT_USER\Software\JoyQPGame4.0\ServiceLoader 然后设置QPServerInfoDB.dbo.DataBaseInfo
  • 修改 QPServerInfoDB.dbo.GameRoomInfo 中数据库IP
  • 复制网站 网站可能需要重置注册.net
    • 前端网站修改数据库配置 支付宝重置回调 支付成功回调
    • 后台网站修改数据库配置 redis配置

JAVA

遇到的问题

  • java.lang.Double cannot be cast to java.lang.Float 遇到这报错可以使用 Float.valueOf(ft.toString())

访问网站遇到的问题

网站中有ajax.googleapis.com引用时出问题

申请免费的https证书

  • git clone https://github.com/Neilpang/acme.sh.git 获取代码
  • cd ./acme.sh
  • ./acme.sh –install 安装工具 不知道这步有什么用反正在linux子系统中没有什么感觉
  • acme.sh –issue -d *.web-jia.com –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please 用dns获取证书需要先执行这步获得dns的TXT值
  • acme.sh –renew -d *.web-jia.com –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please 获取证书
  • openssl pkcs12 -export -out web-jia.pfx -inkey *.web-jia.com.key -in fullchain.cer 生成iis需要的证书 我最终用的是这步生成的应该是下面的也对的
  • openssl pkcs12 -export -out web-jia.pfx -inkey .web-jia.com.key -in .web-jia.com.cer -certfile ca.cer
  • iis导入证书配置域名后竟然还启用tls1.2的问题不然我的android手机访问有点问题
  • 后来根据网上找的启用了 也重启了服务器在那检测协议上我点的是刷新页面看一直没有刷变化的以为一直是无效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault "=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"DisabledByDefault "=dword:00000000
"Enabled"=dword:00000001
  • 实在没有办法我就改用了nginx了 等我所以配置好了 手机访问也正常了看那报告还是说不支持 tls1.2 看到还是iis原来是没有刷新报告的,要点个连接刷新报告的刷新后正常了,也懒的换iis了

postgresql笔记

Postgresql

开始使用

公司现在有个新的项目需要开发,也没有基础的东西了从零开始开发所以服务器我直接用nodejs开发数据库直接是postgresql了

下载安装

最近下载的时候看到有11了就直接下载了11不过下载下来的zip包不能直接使用呢

  • 下载libwinpthread-1.dll 我是通过下载mingw64 找里面的dll文件
  • 新的11.1版本没问题了 不报缺少libwinpthread-1.dll
  • 执行数据库初始化 pg_ctl initdb -D D:\server\data
  • 创建用户 createuser pguser
  • 创建数据库 createdb -e -E UTF8 -O pguser testdb
  • 简单的启动 pg_ctl -D D:/server/data -l logfile start
  • 注册服务 pg_ctl register -D D:\mysoft\pgsql9\data -Npgsql 这个看自己的需要了
  • 设置密码 进入psql -d gamedb
    • 修改密码 \password pguser
    • 显示数据库列表 \l
    • 显示表 \dt
    • 导入sql语句 不包含C:会报没有权限的错误 \i

CentOS 7 下安装

  • postgresql 11 安装
    • yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm -y
    • yum -y install postgresql11 postgresql11-server postgresql11-libs 安装后目录在 /usr/pgsql-11
    • 添加用户 useradd postgre
    • 使用用户登录 su - postgre
    • 设置/var/run/postgresql目录所有用户可以写 不然启动会失败 创建账号也是失败
    • 初始化数据库,创建数据库都一样的
    • 先设置数据目录的所有者是 postgres
    • 初始化时不能时root账号 可以使用 su - postgres
    • exit退出su
    • systemctl enable postgresql-11 设置服务
    • systemctl start postgresql-11 启动服务
    • 启动服务前如果初始化不是默认的目录 需要到 /usr/lib/systemd/system/postgresql-11.service 下修改 PGDATA 的目录
    • 修改后要执行 sudo systemctl daemon-reload 才能启动服务
    • 后面的就跟window下的一样了
    • 连接数据库也需要su

WSL 下安装(Ubuntu)

  • 根据文档执行以下命令
  • sudo apt-get install curl ca-certificates
  • curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  • sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’
  • sudo apt-get update
  • sudo apt-get install postgresql-11
  • 命令执行完后就安装完成了
  • win10的1803,17137.441能安装能启动但创建数据库直接崩溃 could not flush dirty data: Function not implemented
  • 修改配置文件 fsync=off 就可以启动了 这个配置文件启动的数据目录下的postgresql.conf文件

功能

  • unlogged table 无日志表 性能比普通的表高重启数据库表数据没了,可以当内存表使用
  • \du 显示所有的用户

常用操作

  • RETURNING colname 插入数据返回字段数据
  • 允许其它电脑访问数据库
    • 首先修改 postgresql.conf 中的 listen_addresses = ‘*’ 默认是127.0.0.1
    • 还要修改 pg_hbd.conf 添加可以登录的IP 默认只开放了 127.0.0.1
  • 根据索引重新组织数据 CLUSTER devonline_index ON devonline
  • 创建索引 CREATE INDEX tbname_idx ON tb (major, minor)
  • 多表update update userbase A set ptime=B.etime from (SELECT appkey,eparam,MIN(etime) etime from devevent where ename = ‘1’ group by appkey,eparam) B where A.appkey=B.appkey and A.account=B.eparam
  • 备份数据库 pg_dump -h localhost -U pguser tjdata > D:\tjdata.bak
  • 修改json列 可以使用json字符串{“k”:v} 在没有key的时候添加有的时候修改value值 update tb set jdata = jdata::jsonb || ‘{“k”:v}’::jsonb
  • 判断json的value指定条件添加修改 INSERT INTO games VALUES($1,1,jsonb_set(‘{}’::jsonb,$2,$3::jsonb)) ON CONFLICT (UserID) DO UPDATE SET gdata = jsonb_set(games.gdata::jsonb,$2,$3::jsonb) where (games.gdata#>>$2)::int < $3::int
  • 查询工具里面使用参数 可以使用

    1
    2
    3
    PREPARE sqlstr (text[], int) AS select *,gdata#>$1 from games where  (gdata#>>$1)::int > $2;
    EXECUTE sqlstr('{L1}', 2);
    DEALLOCATE sqlstr //删除sqlstr
  • alter table loginlog owner to pguser; 修改所有者一定要加最后的分号

  • TRUNCATE [ TABLE ] name 清理表数据
  • 判断是NULL显示0 COALESCE(c,0)

跨数据库连接

  • dblink 方式感觉这方式不太好,断开连接就没了

    • 非超级用户 如果是超级用户直接dblink就能查询了
    • 打开扩展 create extension dblink; 使dblink相关函数可用
    • 先要给用户赋权限 GRANT EXECUTE ON FUNCTION dblink_connect_u(text,text) TO pguser;
    • 创建连接 SELECT dblink_connect_u(‘gamelog’, ‘hostaddr=127.0.0.1 port=5432 dbname=gamelog user=pguser password=123456’);
    • 创建后 SELECT dblink_get_connections(); 通过这语句就能查询到了
    • 这些创建的连接更session相关断开了就没了
    • 可以执行跨数据库查询了 这里比较麻烦的是要列出所有的查询字段

      1
      SELECT * FROM dblink('gamelog', 'SELECT * From loginlog') AS t(logtime timestamp,userid int,gametp smallint,password varchar(32),loginip varchar(32),channelid integer,macnum varchar(32));
    • 简单的方法通过创建视图解决 CREATE VIEW loginlog AS 前面的语句就可以了

    • 只要 pg_hba.conf 文件的 METHOD 不是 trust 后就能直接传连接字符串了,这样操作就更简单了,建个视图就搞定了
  • SCHEMA 模式方式实现 这个好像只能在同一个库下面
    • 显示当前所有模式 \dn
    • 创建模式 CREATE SCHEMA game;
    • 显示模式搜索 show search_path;
    • 设置模式搜索 set search_path to “$user”,public,game;
    • 修改模式拥有者 alter schema game owner to pguser;
    • 修改表的模式 ALTER TABLE loginlog SET SCHEMA game;
    • 删除模式 DROP SCHEMA game;
  • postgres_fdw 实现跨库访问 这种方式只有查询用户是超级用户的时候才可以非超级用户一直报错
    • 打开扩展 CREATE EXTENSION postgres_fdw;
    • 创建远程服务器
1
2
3
CREATE SERVER gamelog
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1', port '5432', dbname 'gamelog');
  • 赋权限 grant usage on foreign server gamelog to pguser;
  • 创建用户映射
1
2
3
CREATE USER MAPPING FOR pguser
SERVER gamelog
OPTIONS (user 'pguser', password '123456');
  • 创建远程表
1
2
3
4
5
6
7
8
9
10
11
CREATE FOREIGN TABLE loginlog (
LogTime timestamp DEFAULT NOW(),
UserID int,
gametp smallint, --游戏类型
Password varchar(32), --密码
LoginIP varchar(32), --登录IP
ChannelID integer, --渠道号
MacNum varchar(32) --机器码
)
SERVER gamelog
OPTIONS (schema_name 'public', table_name 'loginlog');
  • 非超级用户报错 暂时不知道怎么解决了 有空再测试一下
1
2
3
错误:  password is required
描述: Non-superuser cannot connect if the server does not request a password.
提示: Target server's authentication method must be changed.
  • 上面的错误修改 pg_hba.conf 文件的 METHOD 原来是 trust 修改成md5就可以了
  • 撤回权限 revoke usage on foreign server gamelog from fpguser;

web笔记

web服务器

IIS

  • https证书 有了pfx文件后 选择网站的上层 在右边选择服务器证书 然后倒入就可以了
  • http跳转https 先要安装urlrewrite然后添加rewrite配置如下
1
2
3
4
5
6
7
8
9
10
11
 <rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
  • 证书链错误应该是高防转发的问题
  • 凭据证书问题有空了解一下
  • 这个网址可以用来检查证书是否正确 https://www.geocerts.com/ssl-checker
  • net网站出现 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 需要到指定版本的.net执行 aspnet_regiis.exe -i
  • 服务器启用静态文件压缩后竟然js文件是没有压缩的,然后我安装了动态文件压缩js文件才真的压缩成功了
  • iis的压缩要在iis的管理工具里面设置才能正常,设置完后重启iis
  • 在window server 2012下的IIS8.5上配置现在自己带了.json的MIME类型配置了 导致在以前iis7上正常的自己直接错误的,还会导致请求html页面也报错 [无法显示页面,因为发生内部服务器错误。]

nginx

  • 这次接一个速易sdk 竟然有好多渠道需要跳转的刚开始运营的给一个html文件用通过js跳转的 感觉很麻烦就想着通过rewrite了
1
2
3
4
这代码添加在server下面
rewrite ^/go.html /index.html?plat=soeay redirect;
redirect 302 跳转
permanent 301 跳转
  • 设置转发websocket
1
2
3
4
5
6
7
8
9
10
11
12
13
14
在http下添加
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

在server下配置转发
location / {
proxy_pass http://127.0.0.1:7000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
}
  • 根据不同端口转发
1
2
3
4
5
6
if ($server_port = "6500") {
proxy_pass http://127.0.0.1:7000;
}
if ($server_port = "6501") {
proxy_pass http://127.0.0.1:7001;
}