|
15楼
发表于 2025-5-12 23:11:17
|
只看该作者
河北省衡水市
窗口程序集名 | 保 留 | 保 留 | 备 注 | WebSocket连接池 | | | | 变量名 | 类 型 | 数组 | 备 注 | 连接池 | 整数型 | 1000" ' 假设最大1000 | 空闲连接 | 整数型 | 0 | 活跃连接 | 整数型 | 0 | 锁 | 整数型 | | 服务器句柄 | 整数型 | |
端口 = 8888 启动服务器 (端口 )返回 (0 ) 锁 = 创建进入许可证 () 服务器句柄 = 创建服务器 (端口 )如果 (服务器句柄 = 0 )输出调试文本 ("服务器启动失败!" )返回 (假)否则 输出调试文本 ("服务器已启动,监听端口:" + 到文本 (端口 )) 返回 (真)结束 如果 置服务器回调 (服务器句柄, &处理客户Duan连接 )返回 (真) 启动线程 (&处理WebSocket握手, 客户Duan句柄, )|
处理WebSocket握手 | | | |
客户Duan句柄 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 请求头 | 文本型 | | | 请求行 | 文本型 | | 0 | i | 整数型 | | | 自定义头 | 文本型 | | 0 | 代理IP | 文本型 | | | 响应 | 文本型 | | |
请求头 = 接收数据 (客户Duan句柄, 1024 ) 请求行 = 分割文本 (请求头, #换行符, ) 如果真 (取数组成员数 (请求行 ) > 0 且 寻找文本 (请求行 [1 ], "GET", , 假) > 0 解析自定义请求头 (请求头, 自定义头 )  代理IP = 获取代理IP (请求头 )   响应 = "HTTP/1.1 101 Switching Protocols" + #换行符  响应 = 响应 + "Upgrade: websocket" + #换行符  响应 = 响应 + "Connection: Upgrade" + #换行符  响应 = 响应 + "Sec-WebSocket-Accept: " + 生成SecWebSocketAccept (请求头 ) + #换行符 + #换行符  发送数据 (客户Duan句柄, 响应 ) 进入许可区 (锁 )  计次循环首 (取数组成员数 (连接池 ), i   如果真 (连接池 [i ] = 0 )   连接池 [i ] = 客户Duan句柄   加入成员 (空闲连接, i )  跳出循环 ()  计次循环尾 () 退出许可区 (锁 ) 处理WebSocket通信 (客户Duan句柄 ) 关闭连接 (客户Duan句柄 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 行数组 | 文本型 | | 0 | i | 整数型 | | | 行 | 文本型 | | | 分隔位置 | 整数型 | | |
行数组 = 分割文本 (请求头, #换行符, ) 计次循环首 (取数组成员数 (行数组 ), i ) 行 = 行数组 [i ]  如果真 (寻找文本 (行, "Host:", , 假) = 0 或 寻找文本 (行, "Upgrade:", , 假) = 0 或 寻找文本 (行, "Connection:", , 假) = 0 ) 到循环尾 ()  如果真 (寻找文本 (行, "X-", , 假) = 1 或 寻找文本 (行, "Custom-", , 假) = 1 ) 加入成员 (自定义头, 行 ) 计次循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 行数组 | 文本型 | | 0 | i | 整数型 | | | 代理IP | 文本型 | | |
行数组 = 分割文本 (请求头, #换行符, ) 计次循环首 (取数组成员数 (行数组 ), i ) 如果真 (寻找文本 (行数组 [i ], "X-Forwarded-For:", , 假) > 0 )  代理IP = 取文本右边 (行数组 [i ], 取文本长度 (行数组 [i ]) - 16 )  代理IP = 删首尾空 (代理IP ) 返回 (代理IP )  如果真 (寻找文本 (行数组 [i ], "Proxy-IP:", , 假) > 0 )  代理IP = 取文本右边 (行数组 [i ], 取文本长度 (行数组 [i ]) - 9 )  代理IP = 删首尾空 (代理IP ) 返回 (代理IP ) 计次循环尾 ()返回 ("" ) |
处理WebSocket通信 | | | |
客户Duan句柄 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数据 | 文本型 | | | 解码数据 | 文本型 | | |
判断循环首 (真) 数据 = 接收数据 (客户Duan句柄, 8192 )  如果真 (数据 = "" ) 输出调试文本 ("客户Duan断开连接" ) 断开连接处理 (客户Duan句柄 ) 跳出循环 ()  解码数据 = WebSocket解码 (数据 ) 处理客户Duan消息 (客户Duan句柄, 解码数据 ) 判断循环尾 ()进入许可区 (锁 ) 计次循环首 (取数组成员数 (连接池 ), i ) 如果真 (连接池 [i ] = 客户Duan句柄 )  连接池 [i ] = 0      变量循环首 (1, 取数组成员数 (空闲连接 ), 1, i )   如果真 (空闲连接 [i ] = 客户Duan句柄 )   删除成员 (空闲连接, i, 1 )   跳出循环 ()   变量循环尾 ()    变量循环首 (1, 取数组成员数 (活跃连接 ), 1, i )   如果真 (活跃连接 [i ] = 客户Duan句柄 )   删除成员 (活跃连接, i, 1 )   跳出循环 ()   变量循环尾 ()   跳出循环 () 计次循环尾 ()退出许可区 (锁 )关闭连接 (客户Duan句柄 )|
处理客户Duan消息 | | | |
客户Duan句柄 | 整数型 | | | | 消息 | 文本型 | | | | 输出调试文本 ("收到客户Duan消息:" + 消息 ) 发送WebSocket消息 (客户Duan句柄, "服务器已收到你的消息:" + 消息 )|
发送WebSocket消息 | 逻辑型 | | |
客户Duan句柄 | 整数型 | | | | 消息 | 文本型 | | | |
帧数据 = WebSocket编码 (消息 )返回 (发送数据 (客户Duan句柄, 帧数据 )) 返回 (消息 ) 返回 (数据 )|
生成SecWebSocketAccept | 文本型 | | |
请求头 | 文本型 | | | |
返回 "base64编码的密钥" 进入许可区 (锁 ) 如果 (取数组成员数 (空闲连接 ) > 0 ) 连接句柄 = 空闲连接 [1 ] 删除成员 (空闲连接, 1, 1 ) 加入成员 (活跃连接, 连接句柄 )否则  连接句柄 = 0 退出许可区 (锁 )返回 (连接句柄 )进入许可区 (锁 ) 变量循环首 (1, 取数组成员数 (活跃连接 ), 1, i ) 如果真 (活跃连接 [i ] = 客户Duan句柄 ) 删除成员 (活跃连接, i, 1 ) 加入成员 (空闲连接, 客户Duan句柄 ) 跳出循环 () 变量循环尾 ()退出许可区 (锁 )
|
|