开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 16527|回复: 118
收起左侧

[易语言纯源码] [原创]websocketpp源码,易语言源码,易语言内存调用源码教程

[复制链接]

结帖率:100% (50/50)
发表于 2021-8-8 07:19:06 | 显示全部楼层 |阅读模式   广东省梅州市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 斜飞 于 2021-8-8 09:04 编辑

易语言的科学计数法会丢失数据,必须以指针方式,或者文本方式存放来读取和写入,此方法使我非常苦恼,又因易语言的unicode不能显示原因导致我的一些数据必须以转码方式存放与读取,所以打算学习下火山开发,但是突然发现自己好像玩不转(关于底层封装,数据转换),于是打算学习下C++再来学习火山,在学习了一个星期C++,发现C++不是那么难,易语言进阶学者都可以学下,拿国外开源项目websocketpp实践下(因为这玩意比较简单),编译给易语言使用。,本贴结尾分享websocketppC++源码,易语言内存调用源码。


WebSocket++ 是一个 C++ 库,可用于实现 WebSocket 功能。该项目的目标是提供可移植、灵活、轻量级、低级别和高性能的 WebSocket 实现。

WebSocket++ 不打算单独用作 Web 应用程序框架或全功能 Web 服务平台。因此,组件、示例和性能调整面向作为 WebSocket 客户端或服务器的操作。有一些最小的便利特性偏离了这一点(例如响应除 WebSocket 升级以外的 HTTP 请求的能力),但这些不是项目的重点。特别是 WebSocket++ 不打算实现任何非 WebSocket 相关的回退选项(ajax/长轮询/彗星等)。

为了保持紧凑和提高可移植性,WebSocket++ 项目努力在可能和适当的情况下减少或消除外部依赖。除了 C++11 标准库之外,WebSocket++ 核心没有任何依赖项。对于非 C++11 编译器,Boost 库为所使用的 C++11 功能提供了 polyfill。

WebSocket++ 实现了一个可插拔的数据传输组件。默认组件允许通过使用 STL iostream 或通过读取和写入字符缓冲区的原始字节改组来减少功能。该组件没有非 STL 依赖,可以在没有 Boost 的 C++11 环境中使用。还包括一个基于 Asio 的传输组件,它提供全功能的网络客户端/服务器功能。该组件需要 Boost Asio 或 C++11 编译器和独立的 Asio。作为高级选项,如果您想使用其他库提供自己的传输层,WebSocket++ 支持自定义传输层。

为了适应 WebSocket++ 收集的各种用例,该库的构建方式是大多数主要组件都是松散耦合的,并且可以换出和替换。WebSocket++ 将尝试跟踪 WebSocket 协议和任何扩展的未来发展。

Websocketpp介绍。

Websocketpp又称的WebSocket ++,
WebSocket++ 是一个 C++ 库,可用于实现 WebSocket 功能。该项目的目标是提供可移植、灵活、轻量级、低级别和高性能的 WebSocket 实现。
这是官网:https://docs.websocketpp.org/index.html
具有以下等功能。
1.子协议交互
2.设置和读取协议头
3.心跳ping和pong
4.Http代理
5.设置UA协议头
6.设置Origin
7.定时器和线程安全
8.主动关闭
9.所有向连接发送一条消息

上面写的功能我都没有封装,只封装了回调绑定,连接,发送等功能...

    • 关于websocketpp编译
    • C++编译DLL供易语言使用
    • 易语言DLL文件不落地内存调用
  • 关于websocketpp编译


websocketpp SSL编译环境需要Boost库和OPENSSL库,这两个库可以网上下载或者自己到官网源码区编译(我是下载编译好)

Boost库官网:http://www.boost.org/

Boost库版本下载地址:

https://sourceforge.net/projects/boost/files/boost-binaries/

openssl下载地址:

https://www.openssl.org/source/

以及websocketpp源码下载地址:https://github.com/zaphoyd/websocketpp

我们打开测试例子print_client_tls文件cpp

包含头文件和库以后遇到坑,提示删除lib文件,这里我们给加上;

#pragma comment ( lib , "libcrypto.lib" ) #pragma comment ( lib , "libssl.lib" )
添加以后编译通过~
C++编译DLL供易语言使用




#define dllinput   __declspec ( dllexport )//改名

dllinput int __stdcall SetInit ( int * openPtr , int * message , int * onCloss ) //声明函数
QQ截图20210808062818.png

打开配置属性 -- C/C++ -- 高级 -- 调用约定
我们可以看到C ++默认编译是__cdecl调用约定,直接编译会导致导出的函数名字乱码(函数名字粉碎机由来)
一般人会用extern “C”会添加到导出函数前面,防止C ++乱来(这句话代码是C ++编译器按C标准来编译C语言代码
但是这样我们不得不在易语言声明DLL名中加上@

所以我们用另一种导出函数名字方式,创建def定义文件,添加函数名称,这样c++就会跟着你定义的函数名字编译。我们还需要在导出函数的类型后面加一个__stdcall,来使易语言能够直接调用。
编译后的DLL文件200KB,真是小而又强悍!



易语言DLL文件不落地内存调用


为什么要写内存调用,因为我们是用易语言,易语言静态编译都是只有一个文件,如果目录里加个DLL文件,PHP天下第一的语言爱好者还以为我们会其他语言
我们去怪兽乐园②群。打开易语言专区,偷偷下载HP_Socket 5.7.1 Beta3_内存Dll完整版_[教程调用有问题请大牛修复].e

QQ截图20210808063906.png

  
子程序名返回值类型公开备 注
_GetProcAddress整数型 
参数名类 型参考可空数组备 注
hLibModule整数型
lpProcName整数型
置入代码 ({ 93, 131, 236, 12, 86, 139, 116, 36, 20, 133, 246, 116, 19, 139, 76, 36, 24, 133, 201, 116, 11, 139, 70, 60, 3, 198, 131, 120, 124, 0, 117, 9, 51, 192, 94, 131, 196, 12, 194, 8, 0, 139, 64, 120, 43, 76, 48, 16, 139, 84, 48, 20, 83, 139, 92, 48, 32, 3, 198, 85, 139, 104, 36, 87, 139, 120, 28, 3, 254, 3, 222, 3, 238, 137, 124, 36, 20, 137, 84, 36, 32, 59, 202, 119, 15, 139, 4, 143, 95, 93, 91, 3, 198, 94, 131, 196, 12, 194, 8, 0, 139, 64, 24, 51, 255, 137, 68, 36, 16, 133, 192, 118, 76, 15, 183, 76, 125, 0, 137, 76, 36, 24, 59, 202, 119, 58, 139, 4, 187, 139, 76, 36, 36, 3, 198, 138, 17, 58, 16, 117, 26, 132, 210, 116, 18, 138, 81, 1, 58, 80, 1, 117, 14, 131, 193, 2, 131, 192, 2, 132, 210, 117, 228, 51, 192, 235, 5, 27, 192, 131, 216, 255, 133, 192, 116, 25, 139, 84, 36, 32, 139, 68, 36, 16, 71, 59, 248, 114, 180, 95, 93, 91, 51, 192, 94, 131, 196, 12, 194, 8, 0, 139, 68, 36, 20, 139, 76, 36, 24, 139, 4, 136, 95, 93, 91, 3, 198, 94, 131, 196, 12, 194, 8, 0 })
返回 (0)




看几遍内存调用机制,好把,这个汇编写的,我实在看不懂。
但不妨碍我复制粘贴代码的操作。
但是你以为我就不懂原理?赶紧百度搜一下装大神。。。。
LoadLibrary加载dll,返回模块句柄,_GetProcAddress 获取函数地址,用官网核心库调用子程序()就可以达到内存调用了

这时候原理都明白了,接着写内存调用写成模块。模块通过编译大小200KB,测试功能,完整。

但是。。


我尼玛这个websocketpp是一个单线程,我得手动开启多线程,好在websocketpp官网自带线程教程,而且它的线程是安全的。
教你写多线程以及ID映射: https://docs.websocketpp.org/md_tutorials_utility_client_utility_client.html




特别是,WebSocket 客户端需要安全的随机数生成器。WebSocket++ 可以使用boost_random使用C++11 标准库<random>。因为这个例子也使用了线程,如果我们没有 C++11 std::thread 可用,我们将需要包含boost_thread

该websocket_endpoint对象获得了一些新的数据成员和方法。它现在可以追踪连接ID和关联数据之间的映射,以及要分发的下一个连续ID号。该connect()方法启动一个新的连接方法。该get_metadata方法检索给定 ID 的元数据。

这些多线程和ID操作就不搞了,以后有时间慢慢来,这就是我学完C++的所做出的果实。
下面是C++源代码。易语言模块源代码。易语言测试示例源代码
有一起学习交流的小伙伴可以加下群:383339351

QQ截图20210808070922.png

贴是教程贴。。。。
回复此见
wss服务端[拿来测试用的].zip (858.8 KB, 下载次数: 236)

评分

参与人数 5好评 +4 精币 +8 收起 理由
番茄吧 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 3 支持开源~!感谢分享
阿汤哥 + 1 + 2 支持开源~!感谢分享
a524666979 + 1 支持开源~!感谢分享
皮皮驴 + 1 + 2 感谢发布原创作品,精易因你更精彩!

查看全部评分


本帖被以下淘专辑推荐:

结帖率:0% (0/1)

签到天数: 11 天

发表于 2024-1-16 16:46:56 | 显示全部楼层   陕西省渭南市
  我放过那个DLL了 还报错 QQ截图20240116164631.png
回复 支持 反对

使用道具 举报

结帖率:93% (13/14)

签到天数: 1 天

发表于 2024-1-8 17:45:46 | 显示全部楼层   四川省成都市
这代码质量 ! 很强大
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:100% (4/4)
发表于 2023-8-22 17:20:18 | 显示全部楼层   安徽省合肥市
这代码质量 ! 很强大
回复 支持 反对

使用道具 举报

发表于 2023-8-16 01:52:09 | 显示全部楼层   吉林省长春市
感谢分享!
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 23 天

发表于 2023-8-4 06:46:29 | 显示全部楼层   江苏省连云港市
感谢分享!
回复 支持 反对

使用道具 举报

签到天数: 22 天

发表于 2023-5-10 20:56:11 | 显示全部楼层   河北省邯郸市
66666666688888888888
回复 支持 反对

使用道具 举报

结帖率:94% (17/18)

签到天数: 7 天

发表于 2023-4-29 04:22:51 | 显示全部楼层   福建省莆田市
38333935133333333333333333
回复 支持 反对

使用道具 举报

结帖率:71% (17/24)
发表于 2022-11-15 00:56:30 | 显示全部楼层   福建省泉州市
38333935133333333333333333
回复 支持 反对

使用道具 举报

结帖率:71% (17/24)
发表于 2022-11-15 00:54:41 | 显示全部楼层   福建省泉州市
学习 了22222222222
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表